Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组声明的行为非常奇怪_C_Arrays - Fatal编程技术网

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