5

プログラム:

int x;
int *y;
int **z;

z = (int **) malloc (sizeof(int *));
y = (int *) malloc (sizeof(int));
x = 1;
*z = &x;
*y = x;
.
.
.

質問: 次の違いは何ですか:

*z = &x;
*y = x;

私が理解していることから、* z は x のアドレスを指し、* y は x を指しますが、* y が x を指すためには x のアドレスは必要ありませんか? これら2つの変数で何が起こっているのか、私にはよくわかりません。

編集:変数がスタックまたはヒープにいつ割り当てられるかを知りたいですか?

  • x、y、および z がスタックに割り当てられるのはなぜですか?
  • *y、**y、*z、**z がヒープに割り当てられるのはなぜですか?

最後に、*z を変更すると **z が変更されますか?

4

2 に答える 2

2

この行は、が指すメモリに変数のアドレスを格納します。xz

*z = &x;

この行は、が指すメモリに のを格納します。xy

*y = x;

2 つの割り当てステートメントは無関係です。2 番目のステートメントはコピーを作成しますが、最初のステートメントは作成しません。の値を変更してxを取得**zすると、 の新しい値が表示されxます。ただし、取得すると(つまり)*yの古い値が返されます。x1

于 2013-05-12T14:20:33.033 に答える