数组声明非常奇怪的行为

时间:2011-11-04 18:12:25

标签: c arrays

我有一个简单的功能:

    DoRead(double *writeArray){
//GblOutData is an array of length 80, where each element is 1
    writeArray=GblOutData;
//prints out 1
    printf("%f",writeArray[5]);
    return 0;
    }

当我调用DoRead()时会发生什么:

double data[80];    
DoRead(data);
printf("%f",data[5]);
//prints out 0.000000 instead of 1

我无法弄清楚为什么会这样。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

所有这一行

writeArray=GblOutData;

确实改变了函数DoRead()中变量writeArray的含义。返回时,外部变量数据没有改变。您想复制内容,可能使用memcpy:

memcpy(writeArray, writeArray=GblOutData, 80*sizeof *writeArray);

答案 1 :(得分:1)

您需要将地址传递给数据。一个解决方案可以是(但我个人不会做这样的事情):

DoRead(double **writeArray){
 *writeArray=GblOutData;
  ....
}

DoRead((double**) &data);
相关问题