文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C++串比较问题(后续)

C++串比较问题(后续)

时间:2011-04-18  来源:xi52qian

今天看到了CSDN上的一篇文章http://blog.csdn.net/UndeadWraith/archive/2011/04/08/6310399.aspx,感觉挺有意思,总结了一下,给同事们分享了下,也拿到这里来分享一下吧。

 1 // f0303.cpp
2 // C串比较的错误方式
3 //=====================================
4 #include<iostream>
5 using namespace std;
6 //-------------------------------------
7 int main(){
8 cout<<("join"=="join" ? "" : "not ")<<"equal\n"; // 直接字面值比较
9 char* str1="good";
10 char* str2="good";
11 cout<<(str1==str2 ? "" : "not ")<<"equal\n"; // 字符指针比较
12 char buffer1[6]="Hello";
13 char buffer2[6]="Hello";
14 cout<<(buffer1==buffer2 ? "" : "not ")<<"equal\n"; // 字符数组比较
15 }//====================================

实际运行结果(VS2008/2005/2003 G++(版本忘记了))

equal

equal

not equal

根据大家的第一印象1和3应该都答对了,主要就是2的问题。CSDN上写文章的人使用了反汇编,来查看汇编代码比较内存来看的,后来我仔细想了想其实大可不必那么复杂。

其实,1和2开的内存都是在全局常量区,而3是在堆栈中开的内存,编译器(应该是在编译器这层把?哈哈~)会对常量存储区有个优化。比如

#define NULL "NULL"

你在程序里写了1万个NULL,难道计算机会在常量存储区开1万个NULL的内存吗?显然不是这样的,它会比较并且引用已有的相等数据,也就是说str1和str2存放的指针地址是相同。所以会相等,在堆栈中开的内存,他就是两块独立的内存,指针的地址也肯定不会相等了。

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载