指標和陣列名

2021-08-29 12:26:19 字數 1527 閱讀 5705

在學習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的記憶體位址相同,但是他們的意義不相同,前者僅代表陣列的首位址,後者代表整個陣列的,他的進價單位是整...