系列C++问题请教高手之八:Memory & Stack
写了几句代码如下:
int main(int argc, char *argv[])
{
char* pch = "实验指导 ";
char c4[4] ={1,2,3,4};
return 0;
}
调试运行:
得:pch 在0x0042e01c
c4在0x0012ff78
两个地址不连续,请问为什么?
如果说C4放在栈中,那么 pch的内容呢?
还有:16位汇编用ds:si来寻址,32的C++用什么来寻址呢?
[解决办法]
pch变量所指的内容在0x0042e01c这个位置,通常是常量存储区域
pch变量所在肯定和0x0012ff78相差不远的
这个win32,没有段的概念了,是平坦模式寻址的
[解决办法]
你不能看pch的值,要看变量pch的地址:&pch和c4是连续的
char* pch= "123 "这种初始化字符串的方式使得串 "123 "实际是在代码的文本段中(可能在代码段,也可能在数据段,取决于编译器的实现),而c4数组的内容存在于栈上(这个没什么疑问)。
这个例子也很好地反映了指针和数组名的区别,《C专家编程》上有详细描述
[解决办法]
pch指向常量 "实验指导 ", "实验指导 "通常会放入符号表中,位于代码段。
c4在栈。
[解决办法]
回复人:HaoyuTan(黄昏_分就素那天边滴浮云....) ( 一级(初级)) 信誉:100 2007-06-16 11:14:24 得分:0
?
你不能看pch的值,要看变量pch的地址:&pch和c4是连续的
char* pch= "123 "这种初始化字符串的方式使得串 "123 "实际是在代码的文本段中(可能在代码段,也可能在数据段,取决于编译器的实现),而c4数组的内容存在于栈上(这个没什么疑问)。
这个例子也很好地反映了指针和数组名的区别,《C专家编程》上有详细描述
-------------------------------------
这位说全了,就不补充了。强烈建议每一个C\C++ Coder阅读《C专家编程》
pch与c4在Stack上