返回類型陣列I在C下面的函數:功能在C
int[] function(int a){
int * var = (int*)malloc(sizeof(int)*tags);
....
}
*var
是它的指針到一個數組var
?
如果是,我該如何返回函數中的數組(var
)?
返回類型陣列I在C下面的函數:功能在C
int[] function(int a){
int * var = (int*)malloc(sizeof(int)*tags);
....
}
*var
是它的指針到一個數組var
?
如果是,我該如何返回函數中的數組(var
)?
你真的不能從函數返回一個數組,但有指針:
int * function(int a){
int * var = malloc(sizeof(int)*tags);
//....
return var;
}
複製粘貼錯誤。謝謝:) – MByD 2012-04-03 15:00:27
在C的陣列基本相同類型的指針數組的一個元素。 所以char []基本上是char *
不要忘記跟蹤數組的大小,我也注意到標籤似乎是一個全局變量,大多數情況下避免全局變量是個好主意變量
下面是一些示例代碼:
#include <stdio.h>
#include <stdlib.h>
int* foo(size_t arrSize){
int* arr = (int*) malloc(sizeof(int)*arrSize);
return arr;
}
int main (int argc, char** argv){
printf("Printing array:\n");
int* arr = foo(42);
for(int i=0; i <42; i++){
arr[i]=i;
}
for (int i=0; i < 42; i++){
printf("Element: %d: %d\n", i, arr[i]);
}
free(arr);
return 0;
}
「在C中,數組基本上與指向數組元素的指針的類型相同」 - 這對於出錯是很簡單的。數組與指針不同,數組*表達式*與指針表達式不同。數組表達式將始終有一個數組類型;然而,在大多數情況下,數組表達式將被*替換*指針表達式指向數組中的第一個元素。 'char []'和'char *'在函數參數聲明的上下文中是相同的,而不是其他地方。 – 2012-04-03 15:56:15
如何:
int* function(int tags){
int * var = malloc(sizeof(int)*tags);
//....
return var;
}
數組和指針到基座元件類型是(主要)在C/C++中是同義詞,因此您可以返回一個指向數組第一個元素的指針,並使用它作爲數組本身。
請注意,您的代碼有一個輸入參數a
,但使用tags
爲陣列分配內存。在上面的代碼中,我假定您想使用輸入參數爲此目的
另外,當您不再使用數組時,您將不得不調用free()
上面function
所返回的指針,以避免內存泄漏。上述malloc
分配內存足以容納tags
數int
S,以使陣列相當於int var[tags];
UPDATE:去除塑像爲malloc
的回報
謝謝,更新 – Attila 2012-04-03 15:01:58
下面這段代碼可以澄清一點如何數組和指針的作品。 該函數將爲「標記」int變量分配內存,然後它將使用數字初始化每個元素,並返回指向該數組的內存段。 從主函數我們將循環和打印數組元素,然後我們將釋放不再需要的內存。
#include <stdio.h>
#include <stdlib.h>
int *function(unsigned int tags) {
int i;
int *var = malloc(sizeof(int)*tags);
for (i=0; i < tags; i++) {
var[i] = i;
}
return var;
}
int main() {
int *x;
int i;
x = function(10);
for (i=0; i < 10; i++) {
printf("TEST: %i\n", x[i]);
}
free(x); x=NULL;
return 0;
}
在C中,函數不能返回數組類型。你的目的,你要返回一個指向int
:
int *function(int a)
{
int *var = malloc(sizeof *var * tags); // where is tags defined?
// are you sure you don't mean a here?
...
return var;
}
這將分配的內存足夠大的塊,以保持tags
整數,且該塊的第一個元素的地址分配給var
。請注意,var
是指向int
的指針,而不是指向數組int
的指針。該指針是從函數返回的內容。
您可以使用標oprerator上指針表達好像它是一個數組,像這樣:
int a = ...;
int *arr = function(a);
...
arr[0] = 0;
arr[1] = 1;
...
arr
是一個指針表現,而不是一個數組表達式,所以sizeof arr
將返回大小的指針類型,而不是它指向的內存塊的大小(因此,您將需要跟蹤分開分配的元素數量)。
關於C良好實踐的注意事項:Malloc語句應該是'T * var = malloc(sizeof(* var)* NUM);',對於由調用者而不是被調用者分配的內存來說, 。 – Matt 2012-04-03 14:46:40