2010-05-03 70 views
1

以下函數聲明與C/C++中創建並返回數組的區別是什麼?這兩種方法都會創建數組並填充適當的值,並在所有數據都通過時返回true。C中的數組參數有什麼區別?

bool getArray(int* array); 
bool getArray(int* array[]); 

感謝

最好的問候, 斯登

+0

第一個函數將如何返回一個新數組?創建問題時,你錯過了一個星號嗎? – 2010-05-03 04:56:38

回答

3

如果它可以幫助你想想看,你可以記住int foo[]是同樣的事情int *foo在一個級別上。所以在你的例子中,第一個傳遞一個指向int的指針,而第二個傳遞一個指向int的指針。

+4

只是爲了澄清:'int foo []'和'int * foo'在函數參數*的上下文中是等價的*。 – jamesdlin 2010-05-03 04:34:11

+0

嗨, 謝謝 - 這真的有助於解決我的問題。我通常只使用C++或Objective-C與特殊的容器類的一切,每次我做純粹的CI陷入困境 幾天,直到我走上正確的道路:(( 正確的任務應該是:是什麼 bool getArray(int** array);bool getArray(int* array[]); 我認爲(希望正確)有沒有區別...的區別 感謝所有你們的幫助。 問候 – STeN 2010-05-03 08:26:42

1

bool getArray(int *array);將一個指針指向一個int作爲參數(實際上是一個int數組來填充)。 bool getArray(int *array[]);需要一個int指針數組。第一個是你想要的,但調用者需要分配一個足夠大的輸出數組,因此getArray()可以將數組元素複製到其中。

理解C指針/數組聲明的一種方法是將它們想象爲說明如何訪問基類型。 int *array意味着如果你說*array,你會得到一個int。 int *array[]表示如果你說*array[x],你會得到一個int。 char (*array)[5][2][3]意味着如果你說(*array)[0 thru 4][0 thru 1][0 thru 2],你會得到一個字符。

+1

如果我這樣做,我可能會做'int * getArray()';-) – 2010-05-03 04:45:24

0

第二個需要一個指向數組的指針。所以,如果你的陣列是int *getme;,那麼你可以撥打getArray(&getme);

+0

不,第二個需要一個指針數組,一個指向數組的指針可以是int(* array)[]'。 – 2010-05-03 04:23:18

+0

哎呀,沒錯。對不起,錯過了那一個。 – Anthony 2010-05-03 04:56:33

1

在附註中,你發佈的代碼是C++。沒有「C/C++」這樣的東西......什麼讓你的原型可以被識別爲C++ - 符合的是數據類型「bool」用於函數的返回類型。布爾變量沒有在C中定義。

+2

「bool」已添加到C99中,但您必須#include 才能得到它。 – 2010-05-03 05:25:38

相關問題