Почему массивы не назначаются в 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. Акцент мой.