首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-01-08 
指针初始化、代码区问题,求解答问题1:int main(){char* aabcdchar* babcdprintf(%d,%d\n,a,b)}

指针初始化、代码区问题,求解答
问题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个字符的字符串,你就会惊奇地发现那个字符串不在代码段,而是数据段。

热点排行