早教吧 育儿知识 作业答案 考试题库 百科 知识分享

求助一个关于C语言指针的问题int main(){x09int a[]={1,2,3,4,5};x09int *p=a;x09printf("%d,%d,%d,%d,%d,%d,%d ",*p,*(++p),(*p)++,*p,*p--,--(*p),*p);x09return 0;}这段程序运行结果是2,2,0,0,0,0,1我不明白的是printf里面的参

题目详情
求助一个关于C语言指针的问题
int main()
{
\x09int a[]={1,2,3,4,5};
\x09int *p=a;
\x09printf("%d,%d,%d,%d,%d,%d,%d\n",*p,*(++p),(*p)++,*p,*p--,--(*p),*p);
\x09return 0;
}
这段程序运行结果是2,2,0,0,0,0,1
我不明白的是printf里面的参数结合是从右向左的,那么在结合到*p--后,p不是已经越界了吗?后面的结果是怎么得到的?
▼优质解答
答案和解析
其实C标准对于函数参数的求值顺序是没有规定的.像在我的机子上win7 vc6出来的结果都是0,自己在编程过程中应该避免这个问题,对于同一个变量相关表达式不要重复求值.如果是考试的话,这个,你看看答案怎么说吧.