【发布时间】:2020-06-05 17:45:25
【问题描述】:
这是我的编码期末练习题。
#include <stdio.h>
#define N 3
// a structure type for storing an array.
typedef struct
{
int *ptrData;
int length;
} ARRAY;
void printArray(ARRAY A)
{
int i;
printf("Array Content:\n");
for (i=0; i<A.length; i++)
{
printf("%d\n", A.ptrData[i]);
}
}
int main()
{
int x[N]={1, 3, 5};
ARRAY array1;
ARRAY array2;
array1.ptrData=x;
array1.length=N;
array2=array1;
array1.ptrData[0]=10;
printArray(array1);
printArray(array2);
return 0;
}
输出是
Array Content:
10
3
5
Array Content:
10
3
5
我无法理解为什么array2 的输出与array1 相同。我了解他们如何获得 array1 的值,但不确定 array2 的值,因为据我了解,array1 的第一个元素在声明 array1 = array2 后更改为 10,但从输出来看,它看起来像 @ 987654329@ 的第一个元素也设置为 10。
如果想澄清为什么array2 的输出与array1 相同。
【问题讨论】:
-
因为它们指向同一个数组,其中只有一个。所以改变它,你通过哪个
struct访问它并不重要。 -
尝试在两个数组中打印
ptrData的值。你会明白的。 -
...
structs ;) -
因为当你复制结构体时,你不会“硬复制”内容,所以每个结构体的指针仍然指向同一个位置,并且两个结构体都没有“拥有”指向的数据。