使用C中的指针通过引用修改数组

时间:2016-08-10 14:18:21

标签: c pointers malloc

我是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数组,而我有一个用户定义的结构,所以不要相信我可以应用相同的解决方案。

1 个答案:

答案 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);

相同