指針存儲的存儲器地址。因此,將這兩個內存地址加1應該可以得到相同的結果,這種情況不會發生。爲什麼? 下面是代碼爲什麼由指針1包含存儲器地址不同於的值地址被指向被指向因此通過指針包含存儲器地址是相同作爲價值存儲器地址的值+ 1個
int main()
{
int ages[] = {23, 43, 12, 89, 2};
int *cur_ages = ages;
printf("\n&cur_ages=%p, &cur_ages+1=%p", &cur_ages, &cur_ages+1);
printf("\n&ages=%p, &ages+1=%p", &ages, &ages+1);
printf("\ncur_ages=%p, cur_ages+1=%p", cur_ages, cur_ages+1);
printf("\n*cur_ages=%d, *cur_ages+1=%d", *cur_ages, *(cur_ages+1));
return 0;
}
輸出是
&cur_ages=0x1ffff85f3d0, &cur_ages+1=0x1ffff85f3d8
&ages=0x1ffff85f3dc, &ages+1=0x1ffff85f3f0
cur_ages=0x1ffff85f3dc, cur_ages+1=0x1ffff85f3e0
*cur_ages=23, *cur_ages+1=43
&年齡+ 1不等於cur_ages + 1。爲什麼?
將非''void *'參數傳遞給'printf(「%p」)''的未定義行爲。你可能認爲這是迂腐的,但各種物體的類型確實是這件事的核心。 – EOF
指針不是地址,將1加到指針不會將地址加1。 – user2357112
@ user2357112:在C語言中,指針值*是*地址。這就是C標準中「地址」這個詞的用法。 C「地址」與機器級別「地址」不同。 –