陣列指標和陣列首位址

2021-08-04 15:23:30 字數 957 閱讀 5389

下面**會輸出什麼()

1

2

3

4

5

6

intmain(intargc,char**argv)

;

int*ptr = (int*)(&a +1);

printf("%d", *(ptr -1));

}

答案 4

解析:這邊主要考察的是陣列指標和陣列首位址的問題。

&a是陣列指標,a是陣列首位址。

而指標的+1,增加的是1個指標型別的長度。比如&a是陣列指標,(&a + 1)增加的是1陣列的長度

所以題目中第四步的ptr指向的是a[4]的位置。

(ptr - 1)減少的是1個資料元素的長度。第五步ptr指向的是a[3],頁就是4

解析:其實測試可以發現,a 和 &a 是同乙個位址,printf("%d",a),printf("%d", &a)結果是相同的。

但是其代表的含義不同,*(a+1)代表從a陣列首位址跳躍乙個int的長度,*(&a+1)表示從a陣列首位址跳躍乙個陣列的長度,也就是指向a陣列最後乙個元素的下乙個位置,因此*(ptr- 1)表示a陣列的最後乙個元素。

陣列名和陣列首位址

常規而言,陣列名就是陣列的首位址。int a 10 上面定義乙個int型陣列,陣列長度為十。a是乙個int 型常量指標,其儲存的值就是陣列的首位址。include int a 2 intmain 結果如下 a 0x804a014 a 0x804a014 a 1 0x804a018 a 1 0x804...

有關陣列首元素位址和陣列本身

陣列在兩種情況下代表陣列本身 即該段連續空間 1.對陣列名進行取位址 2.陣列名出現在sizeof之後 其餘陣列名表示首元素位址 比如 函式傳參 int int p1 array int p2 array 0 int p3 array 0 等價 char p3 null 0 void 0 數值上相等...

數值名,陣列首位址,陣列指標

這幾天上陣列與指標時,對於這三個概念一直都很模糊。什麼位址常量不可以運算,什麼指標加一就是加四個位元組等等.1.include int main void 結果是48,4,4,12,4 2.include int main void p a,i printf p n a printf p n a 1...