陣列名在大部分情況下都作為首元素位址,可以通過*(陣列名+i)找到下標為i的元素,但兩種特殊情況除外
情況一:sizeof中單獨放乙個陣列名(必須在定義該陣列的語句塊內部,而非傳參)
int
main
(void);
printf
("%d"
,sizeof
(arr));
return0;
}
程式執行結果為40,使用sizeof(arr)/sizeof(arr[0]);是計算陣列中元素個數的乙個好方法,在這種情況下陣列名就不再代表首元素位址,而是整個陣列所佔位元組數
另寫一段**以作對比
void
test
(int
*arr)
intmain
(void);
printf
("%d\n"
,sizeof
(arr));
test
(arr)
;return0;
}
**執行結果為404
這裡arr的傳參已經退化為了乙個整型指標,所以32位系統下結果為4個位元組
當然,使用陣列接受也一樣,本質沒有區別
void
test
(int arr[10]
)int
main
(void);
printf
("%d\n"
,sizeof
(arr));
test
(arr)
;return0;
}
情況二:對陣列名進行&取位址後的操作
我們知道,對指向陣列元素的指標進行自增運算是跳過乙個元素(所佔位元組數的位址),其實本質是跳過乙個其指標型別大小。對陣列名進行取位址後獲得的是陣列的位址,如果將它和陣列首元素位址以及陣列名列印出來,會發現它們的值是一樣的。但如果對&arr進行+1等操作,就會發現跳過的不是乙個元素的大小,而是乙個陣列的大小。
當然&arr雖然和arr值一樣,*&arr卻不等於arr[0],一次解引用只是相當於找到了首元素位址(arr),只有兩次解引用(**&arr)才可以找到arr[0]
以上就是陣列名不作為首元素位址的兩種特殊情況
指標 陣列名與陣列首元素位址的關係
陣列名等價於等同於指向陣列首元素的指標!作 者 hh 完成日期 2018年7月15日 版本號 v1.0 問題描 指標 陣列名與陣列首個元素位址的關係!輸入描述 程式輸出 includeint main printf d n a 輸出陣列名!printf x n a 輸出16進製制的陣列名!print...
05查詢陣列指定元素的兩種處理思路
public class test boolean flag false flag為定義的哨兵字元 system.out.println 輸出a陣列如下 for int i 0 i a.length i system.out.println scanner scanner new scanner s...
類模板表示陣列中元素數量的兩種方式
模板常用作容器類,為容器類提供可重用 是引入模板的主要動機。在類中使用動態陣列和構造函式引數來提供元素數目 如模板類vector template class stack int stacksize type items public explicit stack int ss size 構造函式引...