| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1315 人关注过本帖
标题:有个笔试题看不懂?
只看楼主 加入收藏
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 10楼 jqb
怀疑的话直接上vc试试就行了,不要让这种怀疑一直溜走,眼见为实。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2012-04-11 21:55
lengwuqin
Rank: 2
等 级:论坛游民
帖 子:5
专家分:29
注 册:2012-4-11
收藏
得分:10 
int main(void)


{

        int a[] = {6, 7, 8, 9, 10};

        int *p = a;

        *(p++) += 123;   /* 其实没必要把p++扩起来,*和++在同一优先级,从右到左的结合顺序 */


        printf("%d, %d\n", *p, *(++p));




        return 0;

}
 *(p++) += 123; 这句先把p和*结合之后,p的值再++,注意p++并不是单纯的把地址的值加1,而是加一个int型占用的内存空间,
执行后a[0]=123+6;p指向a[1],再看这句printf("%d, %d\n", *p, *(++p));
编译器是从右到左扫描,先做*(++p),即a[2],此时p指向a[2],*p就是a[2]的值了
2012-04-11 22:58
sunlang1234
Rank: 2
等 级:论坛游民
帖 子:47
专家分:77
注 册:2012-2-24
收藏
得分:0 
int main(void)
{

        int a[] = {6, 7, 8, 9, 10};
        int *p = a;
        *(p++) += 123;   /* 相当于*p+=123;p++;*p=a[0],所以a[0]就变成129,p++后就变成p指向a[1] */
        printf("%d, %d\n", *p, *(++p));先执行++p,p指向a[2],再输出。

        return 0;

}
2012-04-11 23:03
魏新建
Rank: 2
等 级:论坛游民
帖 子:55
专家分:86
注 册:2012-2-17
收藏
得分:0 
这个是和栈有关的,因为参数传递是按栈的方式穿进去的,所以是先算右边的,然后再算左边的。
2012-04-12 12:48
michaelc
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2012-4-5
收藏
得分:0 
int main(void)


{

        int a[] = {6, 7, 8, 9, 10};

        int *p = a;

        *(p++) += 123;   /* 这一步的功能是,指针指到a[1]然后a[1]的值加上123,*/


        printf("%d, %d\n", *p, *(++p)); /*这一步的功能是输出,输出的顺序是从右往左,先输出*(++p),指针先移动到a[2],然后输出a[2],接着再次输出a[2]*/




        return 0;

}
2012-04-12 12:56
快速回复:有个笔试题看不懂?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019422 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved