免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: HopeCao
打印 上一主题 下一主题

这个只有两行的C程序至少有80%的人会判断错,不信的就进来! [复制链接]

论坛徽章:
0
31 [报告]
发表于 2003-02-28 10:37 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

原帖由 "思考中。。。" 发表:
#include<stdio.h>;
void main()
{
char *ptr = "csdn";
printf( "%c\n",*(ptr++) );
}
谁要是如此用 char *ptr = "csdn";,他的老师哭死了!


不能这么说,程序是可以千变万化的;程序的技巧虽然重要,但是最重要的还是容错性!

论坛徽章:
0
32 [报告]
发表于 2003-02-28 21:53 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

学习

论坛徽章:
0
33 [报告]
发表于 2003-03-22 23:13 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

哈哈,我都作错了!!看到了自己的不足,也向各位学到了不少东西。
特别感谢那几位给出答案,并且给出解释的朋友!!!
向你们学习!!!

论坛徽章:
0
34 [报告]
发表于 2003-03-23 16:37 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

学无止境

论坛徽章:
0
35 [报告]
发表于 2003-03-24 13:29 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

同意zhutr 的结果与原应。
向zhutr 致敬!

论坛徽章:
0
36 [报告]
发表于 2003-03-24 19:57 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

其实第一个代码

  1. #include<stdio.h>;
  2. void main()
  3. {
  4. char *ptr = "csdn";
  5. printf( "%c\n",*(ptr++) );     /*here 等于printf( "%c\n",*ptr++);*/  
  6. }
复制代码

因为*.++处于同一优先级14级,改级的结合方向是  右-->;左,++比*先来做,所以括号不要了.
第二个,不懂了,那位给我解释一下下.thx

论坛徽章:
0
37 [报告]
发表于 2003-03-31 00:22 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

原帖由 "menp9999" 发表:

为什么加()号不能改变运算优先级?能说明一下么?
实际就是说++有特殊的用法,
*(ptr++)<>;*(ptr+1),是不是这个意思.我找了一下资料,没有找到解释的说明.


这个问题我觉得有点特殊,但也不是太难理解。其实我们将问题看远点,并不是加()不能改变运算优先级,*(ptr++)的加 “1” 是在调用了
*ptr 之后将自身加“1”的,下回用,甚至是到下这一语句中出现也是,*ptr就是指向上次的数据的下一个数据的地址了,

比如有这样子的一语句:(char *ptr="123";)

  1. if (*ptr++)  t=*ptr;
复制代码


语句执行完后 t 是什么?? 也许你会说是 ‘1’ ,不是,t 应该是‘2’,你说是么?menp9999。

*(ptr++)<>;*(ptr+1)  是不成立的,只是运行之后 最大的要点就是
ptr 应该指向哪个数据的问题了。不防运行一下这个:
  1. #include<stdio.h>;
  2. void main()
  3. {char *ptr="123456";
  4. int i;
  5. if (*(ptr++)!=*(ptr+1)) i=1;
  6.      else i=0;
  7. printf( "%d\n", i);
  8. }  
复制代码

论坛徽章:
0
38 [报告]
发表于 2003-03-31 00:24 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

上面后面的那个程序是个检测程序。

论坛徽章:
0
39 [报告]
发表于 2003-03-31 00:39 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

 
*(ptr++)<>;*(ptr+1) 是成立的,只是运行之后 最大的要点就是
ptr 应该指向哪个数据的问题了。不防运行一下这个:


不好意思啊!那个"不"字是我多打了,差点说错了,

 也就是说,*(ptr++)<>;*(ptr+1)  应该是成立的,在这两个ptr是这样子写的时候: *(ptr++) 是不会等于*(ptr+1) [/quote]

论坛徽章:
0
40 [报告]
发表于 2003-03-31 07:00 |只看该作者

这个只有两行的C程序至少有80%的人会判断错,不信的就进来!

belong to the 80%
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP