以下指针表达式有什么区别
*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