与えられた:
int **a; // (double pointer)
int *b; // (pointer)
と の間に違いは*a=b
ありa=&b
ますか?
1 つ目は、変数の値をポイント先の場所に*a = b;
コピーします。b
a
2 番目は、 のアドレスを にコピーa = &b
します。b
a
*a = b;
指しているb
場所に値を割り当てています。a
a = &b;
ここでは のアドレスを割り当てていb
ますa
*a = b
が指しているb
メモリ内の場所への割り当てa
a = &b
のアドレスをb
変数に割り当てますa
。
&
変数のアドレスを取得するのは演算子です
*
ポインターが指す値を取得できる演算子であり、このプロセスを呼び出す必要がある間接化です。
はい、この2つのステートメントは異なります。
ここでの問題は、実際にはこの 2 つの違いは何かということだと思います。次の例は、これを示しています。
int x = 10;
int *y;
int *z;
y = &x;
*z = x;
printf("x: %d, *y: %d, *z: %d\n", x, *y, *z);
x = 20;
printf("x: %d, *y: %d, *z: %d\n", x, *y, *z);
z が指す値は 20 の新しい x 値に更新されませんが、y が指す値は更新されます。