请教个C/C++的简单问题

请问大侠为什么下面我的程序执行错误,错误的结果是执行崩溃,如图。希望详细点(非诚勿扰!),非常感谢。

指针a指向的是字符串常量,放在文字常量区,也就是在静态存储区上,不能通过指针进行修改。如果改成数组形式,则a指向的是这个数组,数组a是存放在栈上的。追问

请问:静态存储区有什么区别,您说“数组a存放在栈上”能再详细点吗?两者是否都在内存呀?

追答

在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符 的指针”,例如:char *a = "123" ; a = "abc";,后者指向这些字符所存储的地址。但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。
网上搜一下,很多的!!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-09-15
char *a = "1122"; 是声明一个指针变量并且给这个指针变量赋值. 注意:既然是给指针变量赋值,那么赋的值就是一个地址,而不是这个地址指向的空间里存放的内容. 这就是你告混淆了的地方.它之所以编译的时候没报错,是因为你给这个指针变量所赋的值的格式并没有错,因为地址值本身也就是用的一些数值(一般以16进制表示)在表示. 你再去认真看看指针的基础内容.