0

次のポインター式の違いは何ですか

*ptr++

++*ptr

(*ptr)++
4

2 に答える 2

3

最初の は*ptr++;、ポインターをインクリメントし、インクリメント前にポインターが指していた値に評価されます。

2 番目の は++*ptr;、ポインターを逆参照し、ポイント先の値をインクリメントします。その値は、インクリメントされた値です。

3 番目の は(*ptr)++、ポインターを逆参照し、ポイント先の値をインクリメントします。その値は、インクリメント前のポイント先の値です。

例えばint arr[4] = { 1, 2, 3, 4 };​​とを考えてみましょうptr = &arr[1];

  • の後int val = *ptr++;、ポインターはptrを指しarr[2]valは 2 です。
  • の後int val = ++*ptr;、ポインターptrは引き続き を指しarr[1]arr[1]がインクリメントされるため、その値は 3 になり、 も同様ですval
  • の後int val = (*ptr)++;、ポインターは引き続き を指しarr[1]arr[1]はインクリメントされるため、その値は現在 3 ですがval、古い値のarr[1]は 2 です。
于 2012-06-19T16:17:58.073 に答える
1

*(ptr++)最初の will は、現在の値で一時ポインタを返し、ptr をインクリメントするのと同等です。

2番目のものは、が指す値をインクリメントしptr(定義された型であると仮定++)、インクリメントされた値を返します

3番目のものは、が指す現在の値を返し、ptrインクリメントしますptr

元。

int a = 0;
int * ptr = &a;
int b = *ptr++;

a = 0、b = 0 ですが、ptrナンセンスを指します。

int a = 0;
int * ptr = &a;
int b = ++*ptr;

a = 1、b = 1

int a = 0;
int * ptr = &a;
int b = (*ptr)++;

a = 1、b = 0

于 2012-06-19T16:23:13.733 に答える