以下函數聲明與C/C++中創建並返回數組的區別是什麼?這兩種方法都會創建數組並填充適當的值,並在所有數據都通過時返回true。C中的數組參數有什麼區別?
bool getArray(int* array);
bool getArray(int* array[]);
感謝
最好的問候, 斯登
以下函數聲明與C/C++中創建並返回數組的區別是什麼?這兩種方法都會創建數組並填充適當的值,並在所有數據都通過時返回true。C中的數組參數有什麼區別?
bool getArray(int* array);
bool getArray(int* array[]);
感謝
最好的問候, 斯登
如果它可以幫助你想想看,你可以記住int foo[]
是同樣的事情int *foo
在一個級別上。所以在你的例子中,第一個傳遞一個指向int的指針,而第二個傳遞一個指向int的指針。
只是爲了澄清:'int foo []'和'int * foo'在函數參數*的上下文中是等價的*。 – jamesdlin 2010-05-03 04:34:11
嗨, 謝謝 - 這真的有助於解決我的問題。我通常只使用C++或Objective-C與特殊的容器類的一切,每次我做純粹的CI陷入困境 幾天,直到我走上正確的道路:(( 正確的任務應該是:是什麼 bool getArray(int** array);
和 bool getArray(int* array[]);
我認爲(希望正確)有沒有區別...的區別 感謝所有你們的幫助。 問候 –
STeN
2010-05-03 08:26:42
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]
,你會得到一個字符。
如果我這樣做,我可能會做'int * getArray()';-) – 2010-05-03 04:45:24
第二個需要一個指向數組的指針。所以,如果你的陣列是int *getme;
,那麼你可以撥打getArray(&getme);
不,第二個需要一個指針數組,一個指向數組的指針可以是int(* array)[]'。 – 2010-05-03 04:23:18
哎呀,沒錯。對不起,錯過了那一個。 – Anthony 2010-05-03 04:56:33
在附註中,你發佈的代碼是C++。沒有「C/C++」這樣的東西......什麼讓你的原型可以被識別爲C++ - 符合的是數據類型「bool」用於函數的返回類型。布爾變量沒有在C中定義。
「bool」已添加到C99中,但您必須#include
第一個函數將如何返回一個新數組?創建問題時,你錯過了一個星號嗎? – 2010-05-03 04:56:38