下面**會輸出什麼()
1
2
3
4
5
6
int
main(
int
argc,
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...