#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