有关printf函数处理过程,值得注意

来源:百度文库 编辑:神马文学网 时间:2024/06/30 21:35:50
#include
int main(){
int a[]={1,2,3,4,5};
int *ptr=a;
//      ptr = &a;
*(ptr++)+=10;
printf("%d  %d\n",*ptr,*(++ptr));
return 0;
}
此程序运行过程中,ptr先指向数组a的第0个元素。
执行完*(ptr++)+=10;时,指针指向数组的第一个元素a[1]且a[1]的值变为11;
执行printf("%d  %d\n",*ptr,*(++ptr));时,由于printf函数处理时涉及到函数参数入栈的问题,所以先将第一函数参数入栈,再将第二个参数入栈,计算时由于对栈来讲,是先进后出,所以先计算*(++ptr),指针指向a[2];再计算*ptr;因此程序运行结果为3,3;
总结:
printf函数处理时,是自右向左的,这是C语言里面函数参数入栈的顺序,对于这些简单参数没什么影响,但如果参数是函数的话就需要注意了。