| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 381 人关注过本帖
标题:一个简单的c语言问题求个解释
只看楼主 加入收藏
waxxpfhh
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-16
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
一个简单的c语言问题求个解释
       int a[4] = {0,4,5,13}, *p;
        p = &a[2];
        printf("*p++=%d\n", *p++);                        
        请问为什么答案是4呢?
我是新人,跪求解释
搜索更多相关主题的帖子: c语言 
2014-05-16 19:16
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:20 
p = &a[2];

而a[2]=5,  最后就是5啊.  怎么会得到4呢?

把你题目发出来看看.

代码测试环境:  WinXP+C-Free5.0.
2014-05-16 20:05
waxxpfhh
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-16
收藏
得分:0 
回复 2 楼 vvvcuu
(7) 设有如下程序段:

int a[4] = {0,4,5,13}, *p;

        p = &a[2];

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

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

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

        printf("%d\n",a[0]);

     试写出执行该程序段后的输出结果。
老师给的答案是4, 我想不通啊,我觉得答案给错了



2014-05-16 20:18
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:0 
答案没错啊.  注意*和++,--运算符的优先级.  
程序代码:
int a[4] = {0,4,5,13}, *p;

        p = &a[2];

        printf("++(*p)= %d\n", ++(*p));       //这里++(*p),先求指针指向的数字5,然后自加得到6,但是p没变,*p=a[2]

printf("*--p=%d\n", *--p);                    //这里p已经变了,先对p减1,然后求p指向的地址的数字.*p=a[1]

        printf("*p++=%d\n", *p++);            //这里在执行这一步的时候和上一步比p没变,但和开始的时候比p变了,比开始的时候小1.*p=a[1], 执行完后,对p加1.*p指向
                                              //了a[2].如果紧跟这里有语句printf("*p=%d\n", *p);的话,可以验证会输出6. 
        printf("%d\n",a[0]); 
     

建议查看教材中指针相关内容, 看看指针和自加自减运算的关系.

代码测试环境:  WinXP+C-Free5.0.
2014-05-16 20:52
waxxpfhh
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-5-16
收藏
得分:0 
回复 4 楼 vvvcuu
我忽略了上一步的p已发生改变,所以做不出来了,谢谢了
2014-05-16 21:04
快速回复:一个简单的c语言问题求个解释
数据加载中...
 
   



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

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