为什么char* p="sfsdf"在代码段,而char str[]="sfsdf"在栈区!

cytzrs 发布于 2013/12/21 16:55
阅读 132
收藏 0
为什么char* p="sfsdf"在代码段,而char str[]="sfsdf"在栈区!
加载中
0
张宏亮
张宏亮
p在栈区,"sfsdf"在静态变量区。
芦苇荡
芦苇荡
第一个''sfsdf'不是在常量区吗?怎么会在静态变量区了?
张宏亮
张宏亮
你可以去网上搜线性地址空间,看完一切就明白了。
cytzrs
cytzrs
谢谢
张宏亮
张宏亮
str肯定在栈区啊,p是指向静态变量区的指针。
cytzrs
cytzrs
那str为什么在栈区阿
0
中山野鬼
中山野鬼

p是个指针。用于指向一个空间。str是个数组,需要自带存储看空间。str作为局部变量,则整体空间在栈内分配。 p指针本身也在栈内分配,而p指向的空间,是静态数据,则不在栈内分配。

p本身作为指针类型,自身存在一个空间,所谓“用于指向一个空间”,是空间内存储的数据指向一个空间。

str本身是个存储空间,str是该存储空间的名称。str就是该空间的整体空间的描述符号。

哈不知道是否解释清楚了。

ericsoul
ericsoul
可以这么理解:指出两个等号的差异,第一个等号是把一个常量字符串的首地址赋值给一个指针变量。第二个等号是给一个字符串数组变量初始化。咦,貌似就是类似int a=1;和int a;a=1;的差别哈。
中山野鬼
中山野鬼
回复 @prehisle : 哈。你还没有理解清楚吧。我不去写汇编,我也真的无法搞清楚。哈
sToa
sToa
第一段说清楚了,后面的补充越说越晕,呵呵
cytzrs
cytzrs
非常感谢
返回顶部
顶部