在c函数中分配一个数组

时间:2010-11-14 19:39:07

标签: c pointers

我正在尝试在函数内部分配和初始化一个数组,但我似乎无法在返回后获取值。

这是我最近几乎在努力的尝试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int func(int **thing);

int main() {

 int *thing;

 func(&thing);

 printf("%d %d", thing[0], thing[1]);
}

int func(int **thing) {

 *thing = calloc(2, sizeof(int));

 *thing[0] = 1;
 *thing[1] = 2; 

 printf("func - %d %d \n", *thing[0], *thing[1]);
}

但是在函数外部打印的值是1和0。 有很多关于指针的文档,但我没有发现这个特定的案例。关于我做错的任何提示?

5 个答案:

答案 0 :(得分:6)

您可能会发现从函数返回新分配的数组更容易,而不是传递指向指针的指针:

int *func();

int main() {

 int *thing;

 thing = func();

 printf("%d %d", thing[0], thing[1]);
}

int *func() {

 int *thing;

 thing = calloc(2, sizeof(int));

 thing[0] = 1;
 thing[1] = 2; 

 printf("func - %d %d \n", thing[0], thing[1]);

 return thing;
}

您的代码无效的原因是:

*thing[0]

由于运营商的优先权,您应该使用:

(*thing)[0]

答案 1 :(得分:5)

*[]的优先级使得您的作业意味着*(thing[0])。您需要明确括号,如(*thing)[0]

答案 2 :(得分:3)

func()内,*thing[n]相当于*(thing[n]),即*(*(thing + n)),即数组索引优先于解除引用。您需要使用(*thing)[n]进行分配。

答案 3 :(得分:1)

[]优先于解除引用。使用明确的括号:(*thing)[0] = 1;

答案 4 :(得分:0)

使用()作为正确的优先级后,不要忘记将*thing = calloc(2, sizeof(int));更改为thing = calloc(2, sizeof(*int));并为thing元素分配内存,因为其元素是指向整数的指针