#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'值有何不同?
*p++
Run Code Online (Sandbox Code Playgroud)
相当于:
*(p++)
Run Code Online (Sandbox Code Playgroud)
所以这种变化p.
你的程序调用未定义的行为,因为它修改并访问p和*p序列点之间,与所有这些增量和第二接入printf参数列表.在您使用的实现中,所有p访问都在增量之前完成,它会打印未修改的值.但是,*p在增量之后完成,因此它会打印修改后的值.
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |