2011-03-30 249 views

回答

10

不,兩者沒有區別。

-1

你將不得不取消引用值第一個...

+0

我.......認爲 – 2011-03-30 20:19:09

+0

nope。這取決於你,如果你願意,你可以解引用第二個:'*(array + 3)'和'pointer [3]'是一樣的。 – BlackBear 2011-03-30 20:21:36

+0

那麼,我有兩個函數: int function(int arr []); int function2(int * arr); 爲了測試,我有這個數組: int arr [5] = {1,1,1,1,1}; 在Visual Studio 2010中,我可以這樣做: function(arr); function2(arr); 即使我沒有將一個動態分配的數組傳遞給function2,它仍然允許我這樣做。爲什麼是這樣?通過做基準測試,兩個函數都有相同的結果,所以如果解除引用確實發生,它可以忽略不計。 – leetNightshade 2011-03-30 20:26:24

1

語義是相同的,但對於外部編程,它更容易和直接的理解:第二個函數接受一個數組作爲參數。它不可能像第一個那樣直接。

3

C編譯器沒有區別。儘管如此,讀取代碼的程序員卻有所不同。

這裏,ARR是指向一個整數(可能用於從函數返回的結果):

foo(int* arr) {} 

這裏,ARR是一個指向第一個整數數組中的(可能是用於使列表在功能中和/或在功能外):

foo(int arr[]) {} 

此外,指定函數的返回類型將有所幫助。

相關問題