免费注册 查看新帖 |

Chinaunix

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

"A"=="A"为什么会不成立!!!? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2004-09-25 12:28 |只看该作者

"A"=="A"为什么会不成立!!!?

乌邪飞飞,我觉得你的写法有问题,你是不是想将两字符串“A”付给指针P1,P2,然后比较两个指针呀,“A”==“A”比较的是地址跟你这种比较指针的意思和作用是相用的

论坛徽章:
0
22 [报告]
发表于 2004-09-25 15:52 |只看该作者

"A"=="A"为什么会不成立!!!?

xtugrad:看到你的解释,我又想起了一个问题,两个完全相同的字符串,会不会保存在不同的地址里,如果是给两个指针赋同样的字符串,会不会在不同的地址

论坛徽章:
0
23 [报告]
发表于 2004-09-25 17:27 |只看该作者

"A"=="A"为什么会不成立!!!?

晓风上面的whyglinux已经说的很清楚了:在编译器优化的情况下可能会放在相同的地址里

论坛徽章:
0
24 [报告]
发表于 2004-09-25 17:57 |只看该作者

"A"=="A"为什么会不成立!!!?

converse:首先多谢你的关注,不过我想你可能没有理解我的意思,我知道相同的字符串很可能会放在相同的地址里,在优化的情况下这是理所当然的,我所问的意思是,相同的字符串有没有可能放在“不同”的地址里,尤其是两个字符型指针在得到相同字符串时,它们有没有可能会放在不同的地址中,我强调的是不同的地址。所以还请各位朋友给予释,还请大家多多关注多多讨论,谢谢:)

论坛徽章:
0
25 [报告]
发表于 2004-09-25 18:45 |只看该作者

"A"=="A"为什么会不成立!!!?

To 晓枫:

你在前面的帖子中不是已经说过了 "A" == "A" 在 TC 中的结果是不相等的吗?那不就是说这两个字符串 "A" 放在不同的地址中吗?

论坛徽章:
0
26 [报告]
发表于 2004-09-25 21:53 |只看该作者

"A"=="A"为什么会不成立!!!?

事实上,新的C编译器,总是会merge常量字符串,无论你是否进行优化,除非你使用了强制选项告诉编译器不要进行merge。
一般来说,编译器在编译期间,会维护一张常量字符串表,遇到一个新的与原来不同的字符串时,才往里添加一项,最后在生成代码时,把这些常量字符串生成在代码段,凡是引用相同字符串的位置,均以代码段中的偏移进行替换,因此相同常量字符串的地址总是相同的,这里我要强调的是常量字符串的地址是代码(text)段空间,而不是data段,更不是bss段,而text段一般是不允许进行写操作的,这也是不能够修改常量字符串中的内容的原因。

论坛徽章:
0
27 [报告]
发表于 2004-09-26 12:40 |只看该作者

"A"=="A"为什么会不成立!!!?

呵呵,谢谢各位朋友的解释,解释的精彩,晓枫非常感谢你们的关注:)尤其是whyglinux,这位大哥回答问题很是巧妙。mfmain,解释的更为深入更为具体,现在我明白,再次感谢大的关注和给予的帮助!:)

论坛徽章:
0
28 [报告]
发表于 2004-09-26 12:54 |只看该作者

"A"=="A"为什么会不成立!!!?

mfmain:这位朋友,你的回答有些深入这让我在明白问题的同时也产生的更多的兴趣。我还想在你的回答中再追问一个问题。你说过“C编译器,总是会merge常量字符串,无论你是否进行优化,除非你使用了强制选项告诉编译器不要进行merge。”可是我在练习时“A”==“A”是作为一个条件表达式用的,是很普通的用法,并没有用什么强制选项告诉编译器不要进行merge。可是按上面那位大哥(whyglinux)的说法,这两个相同的常量字符串确实放在了不同的地址里,编译器又确实没有进行merge,这又是为什么呢?你能再给解释一下吗?难道又是TubroC的编译器优化上的问题吗。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
29 [报告]
发表于 2004-09-26 13:01 |只看该作者

"A"=="A"为什么会不成立!!!?

[quote]原帖由 "晓枫"]mfmain:这位朋友,你的回答有些深入这让我在明白问题的同时也产生的更多的兴趣。我还想在你的回答中再追问一个问题。你说过“C编译器,总是会merge常量字符串,无论你是否进行优化,除非你使用了强制选项告诉编译器..........[/quote 发表:
这是各大编译器的实现问题,而不是一个标准问题.
像mfmain所说是指有编译器参数,在IDE中可能有设置的.一般命令行上也有参数可设置.默认情况下是否merge那就去看编译器的文档..我觉得不要太在意这个问题,知道是怎么回事就行了.你现在不知道是怎么回事吗?知道了吧?那就行了.

论坛徽章:
0
30 [报告]
发表于 2004-09-26 13:16 |只看该作者

"A"=="A"为什么会不成立!!!?

呵呵,光明使者按你的解释我好像又明白了一些,照理说按我现在的情也不用深究太深,不过我觉得有些钻研精神能提出问还是好的。尤其是像这们这样的人,开始问题多些,以后考虑问题就会全一些,办事成功率就会高一些,烦麻也就会少一些。好了就说到这,谢谢光明使者的指点:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP