免费注册 查看新帖 |

Chinaunix

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

[C] 《品悟C》疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-10-13 14:38 |只看该作者 |倒序浏览
问题1:69页
const int = 5;
int *p = (int *)&n;
++*p;
...
for(i = 0;i<n-1;i++)
{
...
}
再也没提过p,请问这个p是干什么用的?

问题2:73页,字符串比较大小,1大于2resu是正数,等于是0,小于是负数。
char s1[100],s2[100];
gets(s1);
gets(s2);
i = 0;
while((s1[i] == s2[i])&&(s1[i]!='\0'))i++;
if(s1[i == '\0'&&s2[i]=='\0'])
   resu = 0;
else
   resu = s1[i] - s2[i];

请问s1[i]和s2[i]不是代表字符么?最后一行代码,俩字符相减能算出2个字符串的大小么?

谢谢!

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
2 [报告]
发表于 2012-10-13 14:48 |只看该作者
@pmerofc

  1. const int n= 5;
  2. int *p = (int *)&n;
  3. ++*p;
  4. ...
  5. for(i = 0;i<n-1;i++)
  6. {
  7. ...
  8. }

复制代码
is it possible the variant "n" be put in ".rdata" section (read-only memory block)?

  1. char s1[100],s2[100];
  2. gets(s1);
  3. gets(s2);
  4. i = 0;
  5. while((s1[i] == s2[i])&&(s1[i]!='\0'))i++;
  6. if(s1[i == '\0'&&s2[i]=='\0'])
  7.     resu = 0;
  8. else
  9.     resu = s1[i] - s2[i];
复制代码
change to

  1. char s1[100],s2[100];
  2. gets(s1);
  3. gets(s2);
  4. i = 0;
  5. while((s1[i] == s2[i])&&(s1[i]!='\0'))i++;
  6. resu = s1[i] - s2[i];
复制代码
may be better..., be aware of the loop condition

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [报告]
发表于 2012-10-13 14:49 |只看该作者
1。为了简化代码
我更喜欢 ++*(int*)&n;
或者是 ++(int&)n;

2。我都不明白你哪里不明白
不过 if else 不必要把,似乎可以直接 return s1[i]-s2[i];

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
4 [报告]
发表于 2012-10-13 14:53 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
5 [报告]
发表于 2012-10-13 14:54 |只看该作者
folklore 发表于 2012-10-13 14:48
@pmerofcis it possible the variant "n" be put in ".rdata" section (read-only memory block)?change to ...

这种强制转化由程序员自己负全责
就是不放在只读区,也可能被编译时优化

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
6 [报告]
发表于 2012-10-13 14:58 |只看该作者
@folklore @pmerofc
我发现个问题
    const int n = 5;
    ++(int&)n;
在VC++9.0中编译失败,报:error C2105: '++' needs l-value
按道理,虽然逻辑不通,但语法没问题呀

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
7 [报告]
发表于 2012-10-13 14:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
8 [报告]
发表于 2012-10-13 15:02 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
9 [报告]
发表于 2012-10-13 15:06 |只看该作者
回复 8# pmerofc
是C++写法,g++4.7正确,vc++9.0不行

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
10 [报告]
发表于 2012-10-13 15:06 |只看该作者
回复 6# bruceteen


    change to

  1.         int n = 5;
  2.         ++(int&)n;
  3.         printf("%d",n);
复制代码
and it works. i suggest the variant n be optimized to a really constant in such case.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP