2011-07-24 35 views
0

C,有下面的聲明之間的差:C問題 - 使用[]而不是*?

float DoSomething(const float arr[]); 

比。

float DoSomething(const float* arr); 

比另一個更好嗎?

+2

我確信這已被回答之前... – 2011-07-24 20:35:49

回答

8

不,沒有任何區別。只要數組作爲參數傳遞給函數,數組就會衰減爲指針。

我認爲使用數組語法有點清晰,它提示它是一個數組而不僅僅是指向一個對象的指針。

http://www.c-faq.com/aryptr/index.html有一個相當詳細的指針和數組說明。

+0

安德斯,謝謝。以下是'C'中的多維數組參數嗎?'const float arr [] []'? (我知道'const float ** arr'會起作用) – user3262424

+0

不幸的是我不記得如何處理多維數組。我鏈接到的文章中有一些信息,但除此之外,我無法幫助您。如果你被困在多維數組中,我建議你發佈另一個問題,明確詢問如何在C中創建多維數組。 –

+0

好的,謝謝你的回答 – user3262424

1

作爲參數傳遞給函數時,由於數組類型的隱式指針轉換沒有區別。

此外,當你在你的使用數組語法DoSomething第一個版本使用的arr的價值,arr價值將再次被隱式地使用,也可以當上的右手邊轉換爲指針本身賦值語句,或與[]數組訪問運算符一起使用。

+1

嚴格地說,這裏涉及兩個不同的規則。一個是數組參數聲明被「調整爲」指針參數聲明;這發生在編譯時。另一個是,在大多數但不是所有的上下文中,數組表達式都被隱式轉換爲指針。這些規則一起工作使得*幾乎*可以假裝數組是「真正」的指針(這是不幸的,因爲它們絕對不是)。請參閱[http://www.c-faq.com/](http://www.c-faq.com/)上的comp.lang.c常見問題解答的第6部分。 –

0

每個數組都可以表示爲指針,但每個指針可以表示爲數組。