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

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

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

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

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

3、樓上的都沒有解釋清楚,說數(shù)組名就是指針是錯誤的,指針是變量,是用來存儲變量地址值的變量,而數(shù)組名是常量。

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

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

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

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

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

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

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

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

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