在學習c語言指標時候,老師告訴我們,陣列名就是指標,指向陣列首元素的位址。
有如下**:
int
main
(int argc,
const
char
* argv)
;printf
("arr : %p\n"
, arr)
;printf
("arr+1 : %p\n"
, arr+1)
;printf
("%lu\n"
,sizeof
(*arr));
printf
("--------------------------\n");
printf
("&arr[0] : %p\n"
,&arr[0]
);printf
("&arr[0]+1 : %p\n"
,&arr[0]
+1);
printf
("%lu\n"
,sizeof(*
&arr[0]
));printf
("--------------------------\n");
printf
("&arr : %p\n"
,&arr)
;printf
("&arr+1 : %p\n"
,&arr+1)
;printf
("%lu\n"
,sizeof(*
&arr));
return0;
}
執行結果為:
arr :
0x7ffeefbff5c0
arr+1:
0x7ffeefbff5c44--
----
----
----
----
----
----
&arr[0]
:0x7ffeefbff5c0
&arr[0]
+1:0x7ffeefbff5c44--
----
----
----
----
----
----
&arr :
0x7ffeefbff5c0
&arr+1:
0x7ffeefbff5e8
40
可以看到:
arr
和&arr[0]
還有&arr
是相同的位址。
但是:只有arr+1
和&arr[0]+1
後的操作結果是相同的並且arr
和&arr[0]
的大小均為4.
對於&arr+1
一步走了40個位元組,並且&arr
的大小為40個位元組,所以可以得知&arr
代表的是這個陣列(整個陣列)。
指標和陣列名
想要清楚的知道指標和陣列的本質區別還有處理方式,感覺繞不開看編譯器是如何處理的了,有時間可以上知乎搜搜有什麼編譯類的書籍,或者找個懂編譯的大神,在網上看到有一篇從編譯器角度剖析陣列名的,有所幫助,雖然沒有說到足夠深入讓我理解指標和陣列真正的本質是什麼 本文只是稍微說明一下自己的猜測和理解,可能存在有...
陣列名和陣列名取位址 指標陣列和陣列指標的區別
一,首先我們先分析下陣列名和陣列名取位址的區別。我們都知道陣列名是陣列的首位址,然而對陣列名取位址又是什麼那?看下面一段程式你就會懂的。分析 由執行結果可知,陣列名a和 a的記憶體位址相同,我們已經知道a a 0 所以有a 1指向陣列中下乙個元素 即為在首位址2751180基礎上加int的位元組數4...
陣列名和陣列名取位址 指標陣列和陣列指標的區別
一,首先我們先分析下陣列名和陣列名取位址的區別。我們都知道陣列名是陣列的首位址,然而對陣列名取位址又是什麼那?看下面一段程式你就會懂的。然而 a代表的不是取常量a的位址,而是取陣列的位址。雖然a和 a的記憶體位址相同,但是他們的意義不相同,前者僅代表陣列的首位址,後者代表整個陣列的,他的進價單位是整...