我是C开发的新手,我遇到了在函数中设置数组值并返回调用方法的问题。函数本身必须返回一个int,并且数组大小需要是动态的,所以我试图利用指向数组的指针来更新原始数组。我的代码如下:
int getArray(TestType *testArray)
{
testArray = malloc(2 * sizeof(TestType));
testArray[0].id = 1;
testArray[0].testFloat = 1.5;
testArray[1].id = 2;
testArray[1].testFloat = 2.5;
printf("getArray element 2 id = %d\n", testArray[1].id);
return 1;
}
void main()
{
TestType *testArray;
int i = getArray(*&testArray);
printf("main element 2 id = %d\n", testArray[1].id);
}
当我运行时,我得到以下结果:
getArray element 2 id = 2
main element 2 id = 0
我已经查看了其他地方,虽然c returning an array from a function描述了一个类似的问题,但这是一个char数组,而我有一个用户定义的结构,所以不要相信我可以应用相同的解决方案。
答案 0 :(得分:2)
在您的代码中,testArray
本身正在按值传递。对函数内部所做的任何更改都不会反映给调用者。您需要传递testArray
的地址,即使用指针指针。
在这种情况下,
printf("main element 2 id = %d\n", testArray[1].id);
main()
中的基本上是访问调用undefined behavior的无效内存。
但是,您可以执行类似
的操作int getArray(TestType **testArray)
{
*testArray = malloc(2 * sizeof(TestType));
(*testArray[0]).id = 1;
//....
//....
和
int i = getArray(&testArray);
获得理想的行为。
也就是说,仅提及getArray(*&testArray);
与getArray(testArray);