C语言中指针*p++应该等于*(p++)都已经让p自增,但下面的结果是11,11,11;为什么不是20,11,11

发布时间:2024-05-14 06:37 发布:上海旅游网

问题描述:

我已从一位高手那知道printf自右向左扫描
#include<stdio.h>
void main()
{
int x[5]={10,20,30,40,50};
int *p=x;
printf("%d%d\n%d\n",*p,*p++ ,++(*p));
}

问题解答:

我在VS2005上运行结果是:20 11 20

#include<stdio.h>
void main()
{
int x[5]={10,20,30,40,50};
int *p=x;
printf("%d%d\n%d\n",*p,*p++ ,++(*p));
getchar();
}

很奇怪吧?
原因就是pritnf搞的鬼!!
每个运行环境,对printf的解释不一样,导致了不同的结果!

C语言中指针*p++应该等于*(p++)都已经让p自增,但下面的结果是11,11,11;为什么不是20,11,11

呵呵,运行结果就是20,11,11
你把代码改成这样就看清了:
printf("%d\n%d\n%d\n",*p,*p++ ,++(*p));
getch();

因为 p 从未变成过 p+1
*p p不变
*p++ p变,只是在语句(以;结束)执行之后变
++(*p) p 不变,变的是x[0]而且是语句(以;结束)执行之前就变

所以,整个语句变的都是x[0]
p之后才变

运行结果跟编译器有关。
我用VC++6.0结果是11 11 11

热点新闻