我刚刚在最近的gcc中发现了这种行为。结构成员数组的深度复制
C/C++标准的这种深层复制保证行为是否可以依赖?
[编辑]这种行为的逻辑是什么? C数组对象与=
运算符一起复制或作为函数参数总是被视为一个普通指针。结构成员有什么不同?
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int arr[5];
}
array;
int main(void)
{
array a = {{ 1, 2, 3, 4, 5}};
array b;
int i;
b = a;
b.arr[0] = 0;
b.arr[1] = 0;
for (i = 0; i < 5; i++)
{
printf("%d %d\n", a.arr[i], b.arr[i]);
}
return EXIT_SUCCESS;
}
将输出,
1 0
2 0
3 3
4 4
5 5
是的,它是有保证的。它不是“深”复制它只是“复制”。 – juanchopanza 2014-10-09 20:07:42
你不应该问一个关于两种不同语言的问题,如果你关心这两种语言,应该有两个不同的问题。 – Vality 2014-10-09 20:32:04
@Vality如果这个_specific_问题只被要求使用其中一种语言,答案会不同吗? – xiver77 2014-10-09 20:43:39