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

系列C++有关问题之八:Memory & Stack

2012-03-02 
系列C++问题请教高手之八:Memory & Stack写了几句代码如下:intmain(intargc,char*argv[]){char*pch实验

系列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上

热点排行