以下指针表达式有什么区别
*ptr++
++*ptr
(*ptr)++
第一个,*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
具有旧值arr[1]
2。第一个 will 等价于*(ptr++)
which will 返回一个带有当前值的临时指针,然后递增 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