我正在尝试在函数内部分配和初始化一个数组,但我似乎无法在返回后获取值。
这是我最近几乎在努力的尝试
#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。 有很多关于指针的文档,但我没有发现这个特定的案例。关于我做错的任何提示?
答案 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
元素分配内存,因为其元素是指向整数的指针