In the book it explains:
ptr = &a /* set ptr to point to a */
*ptr = a /* '*' on left:set what ptr points to */
They seem the same to me, aren't they?
いいえ。最初のものはポインターを変更します (現在は を指していますa
)。2 つ目は、ポインターが指している対象を変更します。
検討:
int a = 5;
int b = 6;
int *ptr = &b;
if (first_version) {
ptr = &a;
// The value of a and b haven't changed.
// ptr now points at a instead of b
}
else {
*ptr = a;
// The value of b is now 5
// ptr still points at b
}
両方とも同じではありません。
uの場合、a = 10の値を変更します。次に、*ptrを再度出力します。10ではなく5のみを印刷します。
*ptr = a; //Just copies the value of a to the location where ptr is pointing.
ptr = &a; //Making the ptr to point the a
うーん、ダメ。しかし、同様の動作を説明するために、Oli Charlesworth の回答に追加します。
検討:
int a = 5;
int* ptr = new int;
if(first_version) {
ptr = &a;
//ptr points to 5 (using a accesses the same memory location)
} else {
*ptr = a;
//ptr points to 5 at a different memory location
//if you change a now, *ptr does not change
}
編集:new
(cではなくc ++)を使用して申し訳ありませんが、ポインターのことは変わりません。
いいえ、 ptr = &a
変数「a」のアドレスを変数「ptr」に格納しています。つまり、ptr=0xef1f23
.
では*ptr = a
、変数「a」の値をポインター変数「*ptr」に格納しています。つまり、*ptr=5
.