这个问题已经有了答案:
Post-increment on a dereferenced pointer?
13个答案
在执行*ptrj++之后,ptrj值不应该是4吗?
int j=3,*ptrj = NULL;
ptrj = &j;
*ptrj++;
printf("%i",*ptrj);
最佳答案
*ptrj++
与*(ptrj++)
相同。你期望的是(*ptrj)++
。您应该查找运算符优先级,以进一步了解哪些运算符在其他运算符之前起作用。要了解ptrj++
的作用,您应该阅读指针算法。但这里有一个简单的解释:*(ptrj++)
返回ptrj
指向(3)的值,然后递增ptrj
指向下一个值。
(*ptrj)+返回ptrj
指向(3)的值,然后将ptrj
指向的值从3增加到4。
这意味着您要打印的是地址&j + 1
处的值,即位于内存中变量j
后面的值。这是未定义的行为。正如sourav所指出的,如果启用编译器警告,您将得到一个指向此的警告。*ptrj++
和ptrj++
之间的唯一区别是它返回的内容。由于不使用返回值,因此代码相当于:
int j=3,*ptrj = NULL;
ptrj = &j;
ptrj++;
printf("%i",*ptrj);