如果我有兩個變量a我b都是int,並且一個指針ptr指向& b。如果我們會像這樣增加ptr ++,它應該指向a,如果我沒有錯的話。我認爲這是可能的,因爲當編譯一個我在堆棧和B有4個字節小於A.但是當我在下一行打印那個指針時,我只能得到地址。 代碼:內存中的變量
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a = 52;
int b = 12;
int *ptr;
ptr = &b;
printf("%d\n",*ptr);
ptr++;
printf("\n%d",*ptr);
return 0;
}
但如果我把的printf( 「%d」,&一個);那麼最後的printf打印好並打印 碼的值:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a = 52;
int b = 12;
printf("%d\n",&a);
int *ptr;
ptr = &b;
printf("%d\n",*ptr);
ptr++;
printf("\n%d",*ptr);
return 0;
}
您不能將指向一個對象的指針遞增指向另一個對象,除非這兩個對象是同一個數組的一部分。您的程序展示未定義的行爲。 – EOF
我知道,關於數組,實際上他們正好落後於另外4個字節,並且他們將總是蜜蜂,只有當我使用更多的變量不同的類型,然後之間的空間不會相等。 – honeyPot
您的第一個程序從不使用'a',因此編譯器正在優化內存分配和/或分配。第二個程序使用它,所以它得到內存分配。 – Barmar