數(shù)組名代表的是數(shù)組所占存儲(chǔ)區(qū)的首地址(數(shù)組定義后數(shù)組名的值是一個(gè)地址可以被修改)

摘要: 您好,今天小編胡舒來(lái)為大家解答以上的問(wèn)題。數(shù)組名代表的是數(shù)組所占存儲(chǔ)區(qū)的首地址,數(shù)組定義后數(shù)組名的值是一個(gè)地址可以被修改相信很多小伙伴還不知道,現(xiàn)在讓我們一起來(lái)看看吧!1、數(shù)組名是...

您好,今天小編胡舒來(lái)為大家解答以上的問(wèn)題。數(shù)組名代表的是數(shù)組所占存儲(chǔ)區(qū)的首地址,數(shù)組定義后數(shù)組名的值是一個(gè)地址可以被修改相信很多小伙伴還不知道,現(xiàn)在讓我們一起來(lái)看看吧!

1、數(shù)組名是數(shù)組的首地址,就是數(shù)組中第一個(gè)元素的地址,是常量。

2、常量是不能出現(xiàn)在賦值號(hào)=左邊作為左值的。

3、樓上的都沒(méi)有解釋清楚,說(shuō)數(shù)組名就是指針是錯(cuò)誤的,指針是變量,是用來(lái)存儲(chǔ)變量地址值的變量,而數(shù)組名是常量。

4、一般情況下聲明一個(gè)數(shù)組,比如char a[10];之后,數(shù)組名a都是數(shù)組的首地址,是一個(gè)地址常量。

5、但是在函數(shù)聲明的形參列表中除外。

6、比如:int foo(char a[10]);在這種情況下這樣的聲明與int foo(char a[]);int foo(char * a);是等價(jià)的,就是說(shuō)這種情況下,就算你寫(xiě)的是數(shù)組的形式,編譯器實(shí)際處理的時(shí)候也當(dāng)指針來(lái)處理(注意指針是變量,形參也是變量,二者剛好對(duì)應(yīng))。

7、所以在函數(shù)foo內(nèi)部,你對(duì)a進(jìn)行++, --, +=,=之類(lèi)的帶賦值的操作是完全合法的,因?yàn)榇藭r(shí)a就是一個(gè)指針,不是數(shù)組名,當(dāng)你往函數(shù)foo里面?zhèn)魅胍粋€(gè)已經(jīng)事先聲明的數(shù)組的首地址時(shí)候,指針a里面的值就是你這個(gè)已經(jīng)聲明的數(shù)組的首地址,這樣你在foo里面就可以對(duì)你那個(gè)數(shù)組進(jìn)行操作,正是因?yàn)镃有這個(gè)傳地址的優(yōu)點(diǎn),所以省略了很多不必要的拷貝工作,試想如果沒(méi)有這個(gè)傳地址,你傳一個(gè)有幾萬(wàn)個(gè)元素的數(shù)組進(jìn)去,那拷貝工作是相當(dāng)可觀的。

8、這樣,你該明白了int main(int argc, char ** argv);里面為什么可以對(duì)argv進(jìn)行++操作了,既然“main函數(shù)的第二個(gè)形參是一個(gè)指向字符串的指針數(shù)組”,argv出現(xiàn)在函數(shù)聲明中,所以它實(shí)際上是一個(gè)指針,它并不是“一個(gè)指向字符串的指針數(shù)組”,而是一個(gè)可以獲取“一個(gè)指向字符串的指針數(shù)組”的首地址值的變量。

9、樓主,請(qǐng)結(jié)合我前面的講解,仔細(xì)體會(huì)我前面這句話(huà)的意思。

10、國(guó)內(nèi)的教材不知道怎么寫(xiě)的,把別人越講越暈。

11、如果不明白,盡管發(fā)消息問(wèn)我。

本文就為大家分享到這里,希望小伙伴們會(huì)喜歡。