以下指针表达式
之间有什么区别*ptr++
++*ptr
(*ptr)++
答案 0 :(得分:3)
第一个*ptr++;
递增指针并计算指针在递增之前指向的值。
第二个,++*ptr;
,取消引用指针并递增指向的值,其值是递增的值。
第三个,(*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
的旧值为{{1} },2。答案 1 :(得分:1)
第一个将等同于*(ptr++)
,它将返回一个带有当前值的临时指针,然后递增ptr。
第二个将递增ptr
指向的值(假设它是一个定义了++
的类型)并返回递增的值
第三个将返回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