web-dev-qa-db-ja.com

C / C ++で配列を割り当てられないのはなぜですか?

構造体を別の構造体に割り当てると、すべての値が構造体から別の構造体にコピーされます。

struct
{
    int a, b, c;
} a, b;

...
a = b;

しかし、なぜ配列がそのように割り当てられないのですか?

int a[3], b[3];
...
a = b;

厳密に言えば、構造体は可変サイズの要素を持つ配列だけなので、なぜそれが許可されないのですか?この種の割り当てはとにかく未使用です。確かに、アドレスだけが関係しているように見えるかもしれませんが、配列をそのように(「静的に」)簡単にコピーできます。

14
Kapichu

これからの引用 answer

Cは、配列式が評価されるときに最初の要素のアドレスが計算されるように記述されています。

これはあなたが次のようなことをすることができない理由です

int a[N], b[N];
a = b;

abの両方がそのコンテキストでポインタvaluesに評価されるため、これは、3 = 4を書くことと同じです。配列の最初の要素のアドレスを実際に格納するものはメモリにはありません。コンパイラは単に変換フェーズ中にそれを計算します1


1.強調は私のものです。

8
haccks