為什麼對陣列名取位址,得到的為整個陣列的位址?

2022-05-07 10:33:11 字數 657 閱讀 3934

先看一段**:

#include#include

int main(void);

printf(

"%d,%d \n

", a, &a);

printf(

"%d,%d \n

", a+1, &a+1

); printf(

"%d\n

",sizeof

a); printf(

"%d\n

",sizeof &a);

printf(

"%d\n

", *(a + 1

)); printf(

"%d\n

", *((int *)(&a+1) - 1

)); system(

"pause");

return0;

}

得到的結果為:

可以看出a和&a指向的是同一塊位址,但他們+1後的效果不同,a+1是乙個元素的記憶體大小(增加4),而&a+1增加的是整個陣列的記憶體大小(增加20)。既a和&a的指向和&a[0]是相同的!

但是為什麼會出現這種情況呢?

C語言的陣列名和對陣列名取位址

相信不少的c語言初學者都知道,陣列名相當於指標,指向陣列的首位址,而函式名相當於函式指標,指向函式的入口位址。現在又這樣乙個問題,如果對陣列名取位址,那得到的會是什麼呢?很多人立刻會想到 給指標取位址,就是指標的指標,既二級指標嘛!當然這樣的結論是錯誤的,不然這篇筆記也就沒有意義了。下面我們來逐步分...

C語言的陣列名和對陣列名取位址

相信不少的c語言初學者都知道,陣列名相當於指標,指向陣列的首位址,而函式名相當於函式指標,指向函式的入口位址。現在又這樣乙個問題,如果對陣列名取位址,那得到的會是什麼呢?很多人立刻會想到 給指標取位址,就是指標的指標,既二級指標嘛!當然這樣的結論是錯誤的,不然這篇筆記也就沒有意義了。下面我們來逐步分...

C語言的陣列名和對陣列名取位址

相信不少的c語言初學者都知道,陣列名相當於指標,指向陣列的首位址,而函式名相當於函式指標,指向函式的入口位址。現在又這樣乙個問題,如果對陣列名取位址,那得到的會是什麼呢?很多人立刻會想到 給指標取位址,就是指標的指標,既二級指標嘛!當然這樣的結論是錯誤的,不然這篇筆記也就沒有意義了。下面我們來逐步分...