2011-11-04 105 views
0

很奇怪的行为,我有一个简单的函数:与数组声明

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

因为你从来没有设置'数据[5]'为1?仅供参考,当您执行'writeArray = GblOutData;'时,您不会更改函数外部的参数,您只是更改函数内的指针,实际上只是打印'GblOutData [5]'。 –

+0

@SethCarnegie你是对的!当我只是手动设置writeArray [5] = 1 – mugetsu

回答

6

所有该行

writeArray=GblOutData; 

确实是改变功能DoRead()内的可变writeArray的含义。当它返回时,外部变量数据没有改变。您想复制的内容,可能与memcpy:

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

当然,你需要始终确保两个数组的大小相同。当这个程序长大后,这将是一个问题。 – drdwilcox

1

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

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

DoRead((double**) &data); 
+0

不幸的是,我不能自由地改变参数在DoRead中的设置/调用方式,但是我可以在函数内部做任何我想做的事情。 – mugetsu

+0

*可能不是*他在这种情况下想要做的事情,因为他已经在外部分配了一个阵列。 – Boann

+0

我会去用drdwilcox解决方案,用memcpy。无论如何,我只是试图证明发生了什么。 – Fred