#include <stdio.h> int main(void) { char *p = "abcd"; p[1] = 'w'; printf(p); return 0; }
编译通过,但是运行时会出现段错误
#include <stdio.h> int main(void) { char str[] = "abcd"; str[1] = 'w'; printf(str); return 0; }
编译通过,运行也很正常。
解释:
字符串 abcd 存放在常量区,它只是可读的,不可修改,而指针变量p和数组str都是存放在栈区。
第一个程序声明的指针,指向的数据类型为char,而并没有给这个指针动态开辟一块内存区,
char *p = "abcd";这条语句的动作只是让指针指向存放abcd字符串的常量区,所以,不能修改。而第二个程序声明可一个数组,同样它也是在栈区上的,但是,声明了这个数组后在函数的栈区开辟一个内存区域,同时,将这个内存区用abcd字符串填充。所以,它是可以修改的。
面试系列指针与数组
最新推荐文章于 2024-11-06 00:13:23 发布