Я нашел это поведение прямо сейчас, в недавнем gcc.Deep Copy of Struct Member Arrays
Является ли такое глубокое копирование гарантированным поведением стандартом C/C++, на что можно положиться?
[edit] И какова логика такого поведения? Объекты массива 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
Вы не должны задавать вопрос о двух разных языках, должно быть два разных вопроса, если вы обойдетесь обоим. – Vality
@Vality Будет ли ответ другим, если этот _специфический вопрос был задан только для одного из языков? – xiver77