在C
,有下面的聲明之間的差:C問題 - 使用[]而不是*?
float DoSomething(const float arr[]);
比。
float DoSomething(const float* arr);
比另一個更好嗎?
在C
,有下面的聲明之間的差:C問題 - 使用[]而不是*?
float DoSomething(const float arr[]);
比。
float DoSomething(const float* arr);
比另一個更好嗎?
不,沒有任何區別。只要數組作爲參數傳遞給函數,數組就會衰減爲指針。
我認爲使用數組語法有點清晰,它提示它是一個數組而不僅僅是指向一個對象的指針。
在http://www.c-faq.com/aryptr/index.html有一個相當詳細的指針和數組說明。
安德斯,謝謝。以下是'C'中的多維數組參數嗎?'const float arr [] []'? (我知道'const float ** arr'會起作用) – user3262424
不幸的是我不記得如何處理多維數組。我鏈接到的文章中有一些信息,但除此之外,我無法幫助您。如果你被困在多維數組中,我建議你發佈另一個問題,明確詢問如何在C中創建多維數組。 –
好的,謝謝你的回答 – user3262424
作爲參數傳遞給函數時,由於數組類型的隱式指針轉換沒有區別。
此外,當你在你的使用數組語法DoSomething
第一個版本使用的arr
的價值,arr
價值將再次被隱式地使用,也可以當上的右手邊轉換爲指針本身賦值語句,或與[]
數組訪問運算符一起使用。
嚴格地說,這裏涉及兩個不同的規則。一個是數組參數聲明被「調整爲」指針參數聲明;這發生在編譯時。另一個是,在大多數但不是所有的上下文中,數組表達式都被隱式轉換爲指針。這些規則一起工作使得*幾乎*可以假裝數組是「真正」的指針(這是不幸的,因爲它們絕對不是)。請參閱[http://www.c-faq.com/](http://www.c-faq.com/)上的comp.lang.c常見問題解答的第6部分。 –
每個數組都可以表示爲指針,但每個指針可以表示爲數組。
我確信這已被回答之前... – 2011-07-24 20:35:49