複習下陣列名的相關操作

2022-04-15 19:41:16 字數 514 閱讀 7400

inta[5]

=;int*

ptr1 =(

int*

)(a+1);

int*

ptr2 =(

int*)(&

a+1);

int*

ptr3 =(

int*

)((int

)a +1);

假設陣列的首位址為 0x100,

則ptr1,ptr2,ptr3的值分別為多少呢?

想偷懶的同學請潛到水底看答案!

由於a為陣列名,即也可表示為陣列首位址,即a[0]的位址,

所以 a+1為a[1]的位址;

答案:ptr1 = 0x104

&a為型別是int[5]的指標,所以

&a+1就會加上5*sizeof(int)的長度;

答案:ptr2 = 0x100+5*4 = 120

int(a)+1

答案:ptr3 = 0x101

陣列名和陣列名的取址

關於陣列名和指標的區別 推薦看這兩篇文章 示例 char a 3 輸出10進製位址 輸出 a 為 2686777 a 為 2686777 a是陣列名,編譯器處理時相當於陣列首元素的位址 a是乙個指向陣列的指標,值為陣列的位址,等於陣列首元素的位址 輸出 a 為 1 a 為 1 a 為 2686777...

陣列名和陣列名取位址的區別

以下 會列印出什麼樣的日誌呢?cpp view plain copy include int a 2 int main 本機 linux 結果輸出 a 0x804a014 a 0x804a014 a 1 0x804a018 a 1 0x804a01c 沒錯,上面i 和 ii列印出來的位址是一樣的,i...

陣列名和陣列名取位址的區別

include int main 執行效果 printf d n sizeof a 結果20,有點陶醉.a,既然是指向陣列結構的指標,不應該大小為20.其實,ps 如果是 int a 1,則結果是1245037 即1245036 1 揭密陣列名 陣列名的內涵在於其指代實體是一種資料結構,這種資料結構...