【发布时间】:2021-01-04 18:21:48
【问题描述】:
我接到了一个任务,要告诉我打印的内容是什么,但我什么都不懂。
为什么在//***OUTPUT #1*** 的行中打印
first array is:
0 1 2 30
而不是
first array is:
0 1 2 3
如果他们写T2 = T1,这意味着他们指向同一个地址,并且对T2所做的所有更改都将与对T1的更改相同?
我以为不是这样,因为它们是 2 个变量,T2 会将数据复制到 T1 中,但会复制到新地址中。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct myArray
{
int *iArr;
int size;
char name[10];
}MyArray;
void printArray(MyArray T);
int main()
{
MyArray T1,T2;
int i;
T1.size = 4;
T1.iArr = (int *) calloc(T1.size, sizeof(int));
strcpy(T1.name, "first");
for (i=0; i<T1.size;i++)
{
T1.iArr[i] = i;
}
printArray(T1);
T2 = T1;
T2.iArr[3] = T1.iArr[3]*10;
T2.size=2;
printArray(T1); //***OUTPUT #1***
printArray(T2);
strcpy(T2.name, "second");
T2.iArr = (int *) calloc(T2.size, sizeof(int));
for(i=0;i<T2.size;i++)
{
T2.iArr[i] = -i;
}
printArray(T1);
printArray(T2);
return 0;
}
void printArray(MyArray T)
{
int i;
printf("%s array is:\n",T.name);
for(i=0;i<T.size;i++)
{
printf ("%d ",T.iArr[i]);
}
printf ("\n");
}
【问题讨论】:
-
问题陈述不可读。请添加一些大小写、标点符号和格式。
-
T2.iArr == T1.iArr,所以虽然 T1 和 T2 是不同的变量,但它们每个都包含一个指向同一个内存位置的指针。 -
所以如果我将 T2.name 更改为“test”,T1.name 也应该受到影响?
-
分配给
T2.iArr[3]时,与T1.iArr[3]相同。稍后您将T2.iArr更改为指向不同的位置。