4 回答

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

TA貢獻1865條經驗 獲得超7個贊
這是將數組傳遞給函數的語法的一個怪癖。
實際上,在C中傳遞數組是不可能的。如果您編寫的語法看起來應該傳遞數組,那么實際發生的情況是傳遞一個指向數組第一個元素的指針。
由于指針不包含任何長度信息,因此[]
在函數中,形式參數列表實際上被忽略了。
- 4 回答
- 0 關注
- 805 瀏覽
添加回答
舉報