这个问题已经有了答案:
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);

09-10 23:16