4 回答

TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
語(yǔ)法設(shè)計(jì)上如此,編譯器自然也要遵循這一規(guī)則了。
在使用中記住這一點(diǎn)就好了。? 如果你一定要知道為什么當(dāng)年 K&R 要設(shè)計(jì)成這樣,那么...我也不知道。 不過(guò)從另一個(gè)角度想,為避免對(duì)數(shù)組參數(shù)額外的壓棧開(kāi)銷(xiāo),函數(shù)對(duì)數(shù)組參數(shù)的訪問(wèn)幾乎都是以額外尋址的方式實(shí)現(xiàn)的,所以這樣的設(shè)計(jì)從工程師角度來(lái)看是更符合直覺(jué)的。C語(yǔ)言本來(lái)就是源于工程實(shí)踐的,也許這也是原因之一吧(猜)。
當(dāng)然,有時(shí)候我們希望傳遞數(shù)組,并且希望函數(shù)對(duì)數(shù)組的訪問(wèn)不要越界。但因?yàn)?C 語(yǔ)言有這樣的特性,所以很多函數(shù)在數(shù)組參數(shù)后還設(shè)計(jì)了一個(gè)整型參數(shù)。我想你應(yīng)該能夠猜到這個(gè)整型參數(shù)是做什么用的。對(duì)!就是讓用戶傳入數(shù)組的大小,這樣至少能讓函數(shù)知道傳入的數(shù)組有多大(以避免訪問(wèn)越界等)。
另外,C99 標(biāo)準(zhǔn)新增加了額外的語(yǔ)法,可以在聲明函數(shù)時(shí)允許用戶限定數(shù)組參數(shù)的最小容量。
語(yǔ)法示例: int func(int a[static 10]);
關(guān)鍵就是那個(gè) static,這樣限定傳入的數(shù)組必須至少能容納 10 個(gè)元素。
PS. 這個(gè)新語(yǔ)法似乎用的不多,大家已經(jīng)習(xí)慣了老方法。
PPS. 注意,C++ 并沒(méi)有這個(gè)新用法。并且再?gòu)?qiáng)調(diào)下,盡管看起來(lái)很像,但一定要把 C 和 C++ 看作是兩門(mén)不同的語(yǔ)言。C++ 看似像 C 的部分在語(yǔ)法上和 C 有著很多微妙的差異。
PPPS. 我怎么感覺(jué)前面幾個(gè)回答都是機(jī)翻呢...

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是將數(shù)組傳遞給函數(shù)的語(yǔ)法的一個(gè)怪癖。
實(shí)際上,在C中傳遞數(shù)組是不可能的。如果您編寫(xiě)的語(yǔ)法看起來(lái)應(yīng)該傳遞數(shù)組,那么實(shí)際發(fā)生的情況是傳遞一個(gè)指向數(shù)組第一個(gè)元素的指針。
由于指針不包含任何長(zhǎng)度信息,因此[]
在函數(shù)中,形式參數(shù)列表實(shí)際上被忽略了。
- 4 回答
- 0 關(guān)注
- 794 瀏覽
添加回答
舉報(bào)