Printf在连续调用中以不同方式打印相同的变量值,而不在其间进行任何操作

0 c printf

#include<stdio.h>
#include<conio.h>
int main()
//program start here
{

int i= 655535;
int *p =&i;
printf("p:%d \n*p:%d \n",p,*p);
printf("*p++:%d \n p:%d \n *p:%d \n ++(*p):%d \n p:%d \n",*p++, p,*p, ++*p,p);
printf("p:%d\n", p);
getch();
}
Run Code Online (Sandbox Code Playgroud)

输出:

p:2293620
*p:655535
*p++:655536
p:2293620
*p:655536
++(*p):655536
p:2293620
p:2293624
Run Code Online (Sandbox Code Playgroud)

以上程序打印的最后'p'值有何不同?

Bar*_*mar 5

*p++
Run Code Online (Sandbox Code Playgroud)

相当于:

*(p++)
Run Code Online (Sandbox Code Playgroud)

所以这种变化p.

你的程序调用未定义的行为,因为它修改并访问p*p序列点之间,与所有这些增量和第二接入printf参数列表.在您使用的实现中,所有p访问都在增量之前完成,它会打印未修改的值.但是,*p在增量之后完成,因此它会打印修改后的值.