struct node{
int data;
struct node * next;
};
構造体「structnode」にまだメモリを割り当てていない場合、コンパイラはどのようにして「next」メンバーにメモリを割り当てますか。
次のメンバーはポインターです。ポインターはすべて同じサイズであるため、コンパイラーは、次に指す可能性のあるものの大きさを知る必要はありません。
次は単なるポインタなので、すべてのマシンで固定サイズの値です。int+ポインタサイズ+パディングを追加し、ノード構造体を割り当てます。
next
memberはポインタであり、それ自体でnode
はなく、のアドレスを含む変数です。node
すべてのデータ型ポインターは通常同じサイズであるため、コンパイラーは、そのサイズを計算できるポインターであることを知っていれば十分です。
これは、mallocを使用すると動的に発生します。それ以外の場合は何も割り当てられません。コンパイラが行うのは、「割り当てられる」メモリのアドレスを保持するポインタに4バイトを割り当てることだけです。メモリを割り当てずにポインタにアクセスしようとすると、コードがクラッシュします(プログラム内の無効なメモリにアクセスすることになります)