[英]Return 2 dimension array in C function
我想用C語言編寫一個將二維數組返回到我的主函數的函數。
該函數為int
類型返回動態分配的二維數組。
int ** myfunc(size_t width, size_t height)
{
return malloc(width * height * sizeof(int));
}
一旦不再使用,則必須free
刪除。
編輯這僅為數組分配空間 ,該空間可以通過指針算術訪問,但不幸的是不能由諸如array[x][y]
類的索引運算符訪問。
如果您想要這樣的話, 這里是一個很好的解釋。 歸結為這樣的事情:
int ** myfunc(size_t ncolumns, size_t nrows)
{
int **array;
array = malloc(nrows * sizeof(int *));
for(i = 0; i < nrows; i++)
{
array[i] = malloc(ncolumns * sizeof(int));
}
}
您不能簡單地返回malloc( x * y * sizeof(type) );
當您嘗試將數組索引為二維數組時,這將產生分段錯誤。
int **a = malloc(10 * 10 * sizeof(int));
a[1][0] = 123;
a[0][1] = 321;
以上結果: Segmentation fault
您需要首先使用c/malloc()
創建一個指針數組,然后迭代該指針數組並為每個指針的寬度分配空間。
void *calloc2d(size_t x, size_t y, size_t elem_size) {
void **p = calloc(y, sizeof(void*));
if(!p) return NULL;
for(int i = 0; i < y; i++) {
p[i] = calloc(x, elem_size);
if(!p[i]) {
free2d(y, p);
return NULL;
}
}
return (void*)p;
}
而且免費
void free2d(size_t y, void *matrix) {
if(!matrix) return;
void **m = matrix;
for(int i = 0; i < y; i++) {
if(m[i]) free(m[i]);
}
free(m);
return;
}
我想這應該很簡單...
char **functioName(char param[][20])
{
char[][20] temp = malloc(20 * 20 * sizeof char);
//processing
return temp
}
如果您知道數組的大小,則可以執行以下操作:
int (*myfunc())[10] {
int (*ret)[10]=malloc(10*10*sizeof(int));
return ret;
}
此函數返回指向10個整數的10個數組的指針。
當然,您應該按原樣使用它,並且不要忘記在使用后釋放它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.