C 数组声明的行为非常奇怪
我有一个简单的功能:C 数组声明的行为非常奇怪,c,arrays,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()时会发生什么: 我不明白为什么会这样。有什么想法吗?所有的想法 write
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()时会发生什么:
我不明白为什么会这样。有什么想法吗?所有的想法
writeArray=GblOutData;
是否更改函数DoRead()中变量writeArray的含义。当它返回时,外部变量数据没有改变。您想复制内容,可能需要使用memcpy:
memcpy(writeArray, writeArray=GblOutData, 80*sizeof *writeArray);
您需要将地址传递给数据。一个解决方案可以是(但我个人不会这样做):
因为您从未将
数据[5]
设置为1?仅供参考,当您执行writeArray=GblOutData时,您没有在函数外部更改参数
,您只需更改函数内的指针,实际上只需打印GblOutData[5]
@SethCarnegie您说得对!当我只是手动设置writeArray[5]=1时工作,但我不能自由更改在DoRead中设置/调用参数的方式,因此我可以在函数内部执行任何操作。在这种情况下,可能不是他想执行的操作,因为他已经在外部分配了一个数组。我会选择drdwilcox解决方案,使用memcpy。无论如何,我只是想演示一下发生了什么。当然,您需要始终确保两个阵列的大小相同。当这个程序长大后,它将成为一个问题。
memcpy(writeArray, writeArray=GblOutData, 80*sizeof *writeArray);
DoRead(double **writeArray){
*writeArray=GblOutData;
....
}
DoRead((double**) &data);