c - 在c函数中分配一个数组

标签 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。 那里有很多关于指针的文档,但我还没有找到这个特定的案例。关于我做错了什么的任何提示?

最佳答案

与传递指针到指针相比,您可能会发现从函数返回新分配的数组更容易:

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]

关于c - 在c函数中分配一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179273/

相关文章:

c - 将子进程的 stderr 重定向到调用者的缓冲区

c - 为什么在 C89 中得到不同的整数除法值?

c++ - 我可以使用 %p 说明符输出 Windows 句柄吗?

c++ - 在 C++ 成员函数中引用指针

c - fprintf() 函数无法将数据持久化到文件; fflush() 函数后面必须跟着?

memmove()的代码

C 不为新的 char 数组分配内存

c - 将结构赋予带有指针的函数

c - ZeroMQ:异步回复

c - 可能吗?将局部静态值的地址传递给主指针?