我从以下两个声明和初始化中打印出地址和字符串:
char * strPtr = (char *) "This is a string, made on the fly.";
char charArray [] = "Chars in a char array variable.";
打印时,会出现以下输出,其中变量 charArray 和 strPtr 的地址截然不同。问题是,“为什么?”
印刷:
printf( "%10s%40s%20p\n", "strPtr", strPtr, &(*strPtr));
printf( "%10s%40s%20p\n", "charArray", charArray, charArray);
Output:
strPtr This is a string, made on the fly. 0x400880
charArray Chars in a char array variable. 0x7fff12d5ed30
如您所见,不同的地址是:0x400880 与 0x7fff12d5ed30
在此之前声明的变量的其余部分具有与 charArray 类似的地址。
问题又来了:“为什么地址如此不同?”
感谢您的任何帮助。
因为字符串文字,例如“foo bar”被分配在与你的 char 数组“不同的地方”。
This is 依赖于实现,但典型的实现会将字符串文字放入您的.rdata
(“只读数据”)可执行文件的部分,并且您的 char 数组是在本地声明的,因此会进入堆栈。
当图像的不同部分加载到 RAM 中时,它们将被映射到截然不同的地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)