X-man

导航

《程序员面试宝典》一个程序

#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++.即然两种方式都可以。

 

posted on 2014-08-06 20:17  雨钝风轻  阅读(197)  评论(0编辑  收藏  举报