读书人

指针初始化、代码区有关问题求解答

发布时间: 2013-01-08 14:02:14 作者: rapoo

指针初始化、代码区问题,求解答
问题1:
int main(){
char* a="abcd";
char* b="abcd";
printf("%d,%d\n",a,b);

打印的地址是一样的,“abcd”在代码区
问:当定义到char*b的时候,是否是编译器发现 代码区已经存在"abcd",就直接将地址赋值给b?
问题2
问:是否代码区不可能存在两个”abcd“,若可以怎么定义?

谢谢~
[解决办法]
1.是的,编译器做事情了
2.你干嘛管它是在代码区还是数据区?你如果想只是读取,就不用理会,如果想修改,可以用数组:
char a[] = "abcd";
char b[] = "abcd";
这样ab绝对不是一个地址了,
[解决办法]
"abcd" 在文字常量区,不是代码区。
是否存在两个"abcd"是由编译器决定的,一般优化为只有一个。
[解决办法]
你这应该是编译器自动优化了 可以用volatile禁止编译器优化
[解决办法]
字符串常量在整个运行期间只有一份内存拷贝。
所以地址是相同。
因为字符串常量是不能修改的,一份就足够了。。。。
[解决办法]
呵呵 这里有编译器在搞鬼
你试试100个字符的字符串,你就会惊奇地发现那个字符串不在代码段,而是数据段。

读书人网 >C语言

热点推荐