1

次のような構造を定義したとします。

struct person
{
    char name [10];
    int  age;
};

2 つの個人変数を宣言しました。

person Bob;
person John;

ここで、Bob.name = "Bob", Bob.age = 30 and John.name = "John",John.age = 25. そして私は電話しました

Bob = John;

struct person はMemberwise 割り当てを行い、Johns のメンバー値を Bob に割り当てます。

しかし、配列を配列に代入することはできません。では、「名前」配列の代入はどのように機能するのでしょうか?

4

1 に答える 1

1

C 言語が最初にまとめられたとき、それは数十年後にも使用される強力な力になることを意図していませんでした。それは、差し迫ったニーズを迅速かつ簡単に満たすものになることを意図していましたが、かなり恐ろしいものでした. 構造体を値渡しする機能や、(思い出すと)構造体を直接代入する機能など、当然のことと思われている機能の多くは存在しませんでした。ただし、配列のポインターへの分解は、最初から言語の一部でした。

後のバージョンの言語で構造がより強力になったとき、表記法で to のコピーを表現しても問題はstruct1 = struct2;ありませんでした。そのような表現は、それ以前は意味がなかったからです。一方、配列型には独自の既存のルールがあり、配列の代入を構造体の代入のように機能させるには、駆け出しの言語用に作成された多数のプログラムを壊さずにはいられませんでした。struct2struct1

したがって、配列を含む構造体のコピーは、配列のコピーが機能すると予想される方法で機能します。配列のポインタへの分解は、配列が「名前で」アクセスされた場合にのみ発生するためです。構造体に が含まれている場合、構造unsigned char byteArray[64];体の観点からは、これは単純に 64 バイトのブロブです。を参照するとtheStruct.byteArray、その参照は配列変数参照と同じようにポインターに分解されtheStructますが、同じ型の別の変数に割り当てると、コンパイラーは内部構造を無視します。

于 2012-04-05T23:26:38.183 に答える