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