2010-11-14 60 views
2

我想分配和初始化一个函数内的数组,但我似乎无法在返回后取值。在c函数中分配数组

这是我最后几乎工作尝试

#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 有很多指针上的文件在那里,但我还没有发现这种特定的案件涵盖。关于我在做什么的任何提示都是错误的?

+2

由于运算符的优先级,可能有问题吗?我会尝试用“(* thing)[x]”替换所有“* thing [x]”。 – Bwmat 2010-11-14 19:43:48

回答

5

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

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] 
5

的上一页*[]的数字是这样的,你的作业意味着*(thing[0])。你需要明确的加入,如(*thing)[0]

3

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

1

[]比去反射具有更高的优先级。使用明确paranthesis:(*thing)[0] = 1;

0

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