數組名代表的是數組所占存儲區的首地址(數組定義后數組名的值是一個地址可以被修改)
您好,今天小編胡舒來為大家解答以上的問題。數組名代表的是數組所占存儲區的首地址,數組定義后數組名的值是一個地址可以被修改相信很多小伙伴還不知道,現在讓我們一起來看看吧!
1、數組名是數組的首地址,就是數組中第一個元素的地址,是常量。
2、常量是不能出現在賦值號=左邊作為左值的。
3、樓上的都沒有解釋清楚,說數組名就是指針是錯誤的,指針是變量,是用來存儲變量地址值的變量,而數組名是常量。
4、一般情況下聲明一個數組,比如char a[10];之后,數組名a都是數組的首地址,是一個地址常量。
5、但是在函數聲明的形參列表中除外。
6、比如:int foo(char a[10]);在這種情況下這樣的聲明與int foo(char a[]);int foo(char * a);是等價的,就是說這種情況下,就算你寫的是數組的形式,編譯器實際處理的時候也當指針來處理(注意指針是變量,形參也是變量,二者剛好對應)。
7、所以在函數foo內部,你對a進行++, --, +=,=之類的帶賦值的操作是完全合法的,因為此時a就是一個指針,不是數組名,當你往函數foo里面傳入一個已經事先聲明的數組的首地址時候,指針a里面的值就是你這個已經聲明的數組的首地址,這樣你在foo里面就可以對你那個數組進行操作,正是因為C有這個傳地址的優點,所以省略了很多不必要的拷貝工作,試想如果沒有這個傳地址,你傳一個有幾萬個元素的數組進去,那拷貝工作是相當可觀的。
8、這樣,你該明白了int main(int argc, char ** argv);里面為什么可以對argv進行++操作了,既然“main函數的第二個形參是一個指向字符串的指針數組”,argv出現在函數聲明中,所以它實際上是一個指針,它并不是“一個指向字符串的指針數組”,而是一個可以獲取“一個指向字符串的指針數組”的首地址值的變量。
9、樓主,請結合我前面的講解,仔細體會我前面這句話的意思。
10、國內的教材不知道怎么寫的,把別人越講越暈。
11、如果不明白,盡管發消息問我。
本文就為大家分享到這里,希望小伙伴們會喜歡。
作者:baidianfeng365本文地址:http://www.inkvzc.cn/bdf/14854.html發布于 2023-11-24
文章轉載或復制請以超鏈接形式并注明出處白癜風知識網