《程序员面试宝典》一个程序
#include<stdio.h> void main() { int arr[] = {6,7,8,9,10}; int *ptr = arr; *(ptr++) += 123; printf("%d\n", *(ptr)); for(int i=0;i<5;i++) printf("%d ",arr[i]); printf("\n"); ptr = arr; *(++ptr) += 123; for(i=0;i<5;i++) printf("%d ",arr[i]); printf("\n"); printf("%d, %d\n", *ptr, *(++ptr)); }
输出:
7 129 7 8 9 10 129 130 8 9 10 8, 8
*(ptr++) += 123;其实这一行等价于: *ptr = *ptr + 123; ptr++;
http://blog.chinaunix.net/space.php?uid=23694942&do=blog&cuid=2548262 这里有一篇比较专业的解释,对于C语言是从右到左的入栈顺序的,为了满足C语言中的动态参数的特性。C程序栈底为高地址,栈顶为低地址,入栈顺序的确是从右至左的。可到底为什么呢?查了一直些文献得知,参数入栈顺序是和具体编译器实现相关的。比如,Pascal语言中参数就是从左到右入栈的,有些语言中还可以通过修饰符进行指定,如Visual C++.即然两种方式都可以。