如果你有一個變量,就有一個與該變量相關聯的內存地址,並且在指針變量的情況下,該內存地址的「值」是對存儲地址的引用,該地址保存指針的實際數據指着。如果一個指針變量是在一個循環內聲明的,它是否與每個循環的相同內存地址相關聯?
所以,如果我有:
for (int x = 0; x < 2; x++)
{
char * a = (char*)malloc(20);
printf("%p\r\n", &a);
printf("%p\r\n", a);
}
輸出應該是這樣的:
00999999
04427310
00999999
0442ECF0
正如你所看到的,第1和第3的內存地址仍然是指針變量相同在循環的每個過程中聲明,我的理解是,這是因爲前一個變量超出了範圍,下一個可用地址是相同的地址。
這個泛化是否可以擴展到循環中聲明的所有變量或者是否存在異常?
沒有保證,但通常情況下,循環中聲明的變量通常在每次迭代中分配在相同位置,因爲它是編譯器最簡單的方法。 –
變量沒有必要有一個內存地址 - 如果你沒有打印'&a','a'可能被保存在一個寄存器中(在這種情況下'x'最有可能在一個寄存器中)。 – molbdnilo