Почему массивы не назначаются в C/С++?
Можно назначить структуру другому, что приводит к копированию всех значений из структуры в другую:
struct
{
int a, b, c;
} a, b;
...
a = b;
Но почему массивы не назначаются следующим образом:
int a[3], b[3];
...
a = b;
Потому что, строго говоря, строятся массивы с переменными размерами, поэтому почему это не разрешено? В любом случае такое назначение не используется. Конечно, может показаться, что задействованы только адреса, но можно легко копировать массивы таким образом ( "статически" ).
Ответы
Ответ 1
Цитата из этого answer:
C записывается таким образом, что адрес первого элемента будет вычисляться при вычислении выражения массива.
Вот почему вы не можете сделать что-то вроде
int a[N], b[N];
a = b;
, поскольку как a
, так и b
оценивают значения указателя в этом контексте; это эквивалентно написанию 3 = 4
. В памяти нет ничего, что фактически хранит адрес первого элемента в массиве; компилятор просто вычисляет его во время фазы перевода 1.
<суб > 1. Акцент мой.