#include <stdio.h>
void main()
{
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++) += 123;
printf("%d,%d\n",*ptr,*(++ptr));
}
==============================
C中printf计算参数是从右到左压栈的,所以",*ptr,*(++ptr)"是一样的。
root@kyon-desktop:/tmp# ./test
8,8
====
http://hi.baidu.com/aokikyon/blog/item/3f5149d963bac4e338012f37.html
----------------------------------------------------------------------------------------------------------
不光printf函数是这样,你自己写个函数,所有参数也是自右像左计算的。
原因是,如果一个函数有多个参数,比如
int fun (int a, int b, int c);
调用时,总是从最后一个参数开始压栈。 也就是c先进栈,其次是b,最后才是a。
同理, 如果你这样写:
int main ()
{
int i = 0;
printf ("%d,%d,%d",++i,++i,++i);
}
先计算最后一个参数(即最右一个++i),压入1,以此类推,再压入2,3和字符串"%d,%d,%d"的首地址。
所以 , 程序的输出是 3,2,1
不知道这样说你明白不???
从右向左入栈,从左向右输出。
====
http://zhidao.baidu.com/question/113859103
本文深入探讨了C语言中函数参数计算的顺序规则,指出其从右到左压栈的特点,并通过实例展示了参数如何依次被压栈及弹栈的过程。文章进一步解释了这种顺序对程序执行的影响,提供了理解C语言底层机制的洞察。
884

被折叠的 条评论
为什么被折叠?



