char *p和char q[]采用"abcdef"初始化的不同
1 #include <stdio.h> 2 int main() 3 { 4 char *p="abcdef"; //p在栈中,只是一个指针没有申请内存,“abcdef”在常量数据区 5 p[2]='W'; 6 printf(p); 7 getchar(); 8 return 0; 9 } 10 //这个程序编译通过,但是程序运行会出错 11 //p指向的是一块常量数据区,不能修改其值 12 //另一个: 13 #include <stdio.h> 14 int main() 15 { 16 char s[]="abcdef";//s在栈,“abcdef”在栈数据区 17 s[2]='W'; 18 printf(s); 19 getchar(); 20 return 0; 21 } 22 //这个程序能够正常输出! 23 //因为s是一个数组,分配的是一块栈上的内存,而上面只是一个指针,没申请内存!