0

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?

4

6 に答える 6

8

いいえ。最初のものはポインターを変更します (現在は を指しています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
}
于 2012-07-16T11:54:08.680 に答える
0

両方とも同じではありません。

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
于 2012-07-16T12:10:21.360 に答える
0

うーん、ダメ。しかし、同様の動作を説明するために、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 ++)を使用して申し訳ありませんが、ポインターのことは変わりません。

于 2012-07-16T12:03:20.903 に答える
0

いいえ、 ptr = &a変数「a」のアドレスを変数「ptr」に格納しています。つまり、ptr=0xef1f23.

では*ptr = a、変数「a」の値をポインター変数「*ptr」に格納しています。つまり、*ptr=5.

于 2012-07-16T12:01:12.813 に答える