我剛剛在最近的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