免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5297 | 回复: 9
打印 上一主题 下一主题

[C] 一个自减运算符优先级的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-20 16:04 |只看该作者 |倒序浏览
#include<stdio.h>

int main()
{
        char buf[]="asdfgh";
        char*  p1 = &buf[3];
        char*  p2 = &buf[3];

        printf("*--p1 = %c\n", *--p1);
        printf("*(p2--) = %c\n", *(p2--));

        return 0;
}


输出结果:

*--p1 = d
*(p2--) = f  //为什么输出f,而不是d?

论坛徽章:
0
2 [报告]
发表于 2007-12-20 16:33 |只看该作者
是因为 指针没被清除吗?

论坛徽章:
0
3 [报告]
发表于 2007-12-20 16:51 |只看该作者
因为 p2-- 返回的是 p2 自减前的值

论坛徽章:
0
4 [报告]
发表于 2007-12-20 18:15 |只看该作者

回复 #1 wibxy 的帖子

(p2--)的结果是自减前的地址,所以然

论坛徽章:
0
5 [报告]
发表于 2007-12-24 19:15 |只看该作者
*(--p2) = d

论坛徽章:
0
6 [报告]
发表于 2007-12-24 21:09 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2007-12-24 21:16 |只看该作者
*(p2--) 等价于*p2--

论坛徽章:
0
8 [报告]
发表于 2007-12-24 21:51 |只看该作者
原帖由 beilian 于 2007-12-20 16:51 发表
因为 p2-- 返回的是 p2 自减前的值


正解,你可以这样:

  1. #include<stdio.h>

  2. int main()
  3. {
  4.         char buf[]="asdfgh";
  5.         char*  p1 = &buf[3];
  6.         char*  p2 = &buf[3];

  7.         printf("*--p1 = %c\n", *--p1);
  8.         printf("*(p2--) = %c\n", *(p2--));
  9.         /*test*/
  10.         printf("*p2 is %c\n",*p2);
  11.         /*test*/

  12.         return 0;
  13. }
复制代码


这样再输出就能看到效果了,呵呵

论坛徽章:
0
9 [报告]
发表于 2007-12-28 10:21 |只看该作者

总结楼上

1: -- 的优先级比*(取值运算符)高
2: n++表示的是先使用n的值,然后再将n的值递增1

论坛徽章:
0
10 [报告]
发表于 2007-12-28 14:11 |只看该作者
*(p2--)等于*P2的值。这时它还没有自减的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP