c – 常量存储在何处以及如何存储?
我从
here 开始阅读这个问题,我也从
c-faq开始阅读相关问题,但我不明白这背后的确切原因: –
#include <iostream> using namespace std; int main() { //const int *p1 = (int*) &(5); //error C2101: '&' on constant //cout << *p1; const int five = 5; const int *p2 = &(five); cout << *p2 << endl; char *chPtr = (char*) &("abcde"); for (int i=0; i<4; i++) cout << *(chPtr+i); cout << endl; return 0; } 我想知道如何存储常量(整数或字符串文字).我对字符串文字的理解是它们在程序启动时在全局静态内存中创建并持续到程序退出.在“abcde”的情况下,即使我没有给它一个变量名,我可以把它的地址(chPtr),我想我可能在程序终止之前的任何时候取消引用chPtr并且字符值仍然存在,即使我在声明范围之外取消引用它. const int变量“five”是否也放在全局静态中,并且地址p2也可以随时引用? 为什么我可以取“五”的地址,但我不能要求:&(5)?常量“5”和“5”是否存储不同?并且“5”被存储在内存中? 解决方法
你不能获取文字的地址(例如&(5)),因为文字没有“存储”在任何地方 – 它实际上写在汇编指令中.根据平台的不同,您将获得不同的说明,但MIPS64附加示例如下所示:
DADDUI R1,R1,#5 尝试获取立即数的地址是没有意义的,因为它不驻留在(数据)内存中,但实际上是指令的一部分. 如果你声明一个const int i = 5,并且不需要它的地址,编译器可以(并且可能会)将它转换为文字并将5放在适当的汇编指令中.一旦你尝试获取i的地址,编译器就会看到它不能再这样做,并将它放在内存中.如果您只是尝试获取文字的地址,则不是这种情况,因为您没有向编译器指示它需要为变量分配空间(当您声明一个const int i时,它会在第一个中分配空间通过,稍后将确定它不再需要它 – 它不会反向运行). 字符串常量存储在数据存储器的静态部分中 – 这就是为什么你可以获取它们的地址. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |