3
struct node{
  int data;
  struct node * next;
};

構造体「structnode」にまだメモリを割り当てていない場合、コンパイラはどのようにして「next」メンバーにメモリを割り当てますか。

4

4 に答える 4

17

次のメンバーはポインターです。ポインターはすべて同じサイズであるため、コンパイラーは、次に指す可能性のあるものの大きさを知る必要はありません。

于 2009-08-19T11:13:07.757 に答える
7

次は単なるポインタなので、すべてのマシンで固定サイズの値です。int+ポインタサイズ+パディングを追加し、ノード構造体を割り当てます。

于 2009-08-19T11:12:51.940 に答える
3

nextmemberはポインタであり、それ自体でnodeはなく、のアドレスを含む変数です。nodeすべてのデータ型ポインターは通常同じサイズであるため、コンパイラーは、そのサイズを計算できるポインターであることを知っていれば十分です。

于 2009-08-19T11:17:47.547 に答える
0

これは、mallocを使用すると動的に発生します。それ以外の場合は何も割り当てられません。コンパイラが行うのは、「割り当てられる」メモリのアドレスを保持するポインタに4バイトを割り当てることだけです。メモリを割り当てずにポインタにアクセスしようとすると、コードがクラッシュします(プログラム内の無効なメモリにアクセスすることになります)

于 2012-12-30T11:12:46.250 に答える