一个字符串比较问题?

xfxf20 2008-10-31 04:36:10
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << std::boolalpha << ( str1==str2 ) << '\n'; // 输出什么?为什么?
cout << std::boolalpha << ( str3==str4 ) << '\n'; // 输出什么?为什么?
cout << std::boolalpha << ( str5==str6 ) << '\n'; // 输出什么?为什么?
...全文
67 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia_xiaoxin 2008-10-31
  • 打赏
  • 举报
回复
cout << std::boolalpha << ( str1==str2 ) << '\n';
//输出为false,因为str1和str2都指向了字符数组的首地址,两个字符数组虽然内容一样,但它们的地址不一样
cout << std::boolalpha << ( str3==str4 ) << '\n';
//输出为false,因为str3和str4都都指向了字符数组的首地址,两个字符数组虽然内容一样,但它们的地址不一样
cout << std::boolalpha << ( str5==str6 ) << '\n';
//这一句和以上两句的区别在于str5和str6都是指针,它们都指向了常量字符串,为了优化,系统在存储常量字
//符串的静态存储区只维护一个字符串常量,所以两个指针指向的是同一个字符串。
//而上面两句在初始化时,都将常量字符串赋值给了不同的数组,而局部数组是存放在堆栈上的。
//输出为true
whuyotc 2008-10-31
  • 打赏
  • 举报
回复
up
JJZHK 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hhyttppd 的回复:]
cout < < std::boolalpha < < ( str1==str2 ) < < '\n'; // false address of str1 != address of str 2
cout < < std::boolalpha < < ( str3==str4 ) < < '\n'; // 同上
cout < < std::boolalpha < < ( str5==str6 ) < < '\n'; // true "abc"会被编译器放到同一位置
[/Quote]
UP
hhyttppd 2008-10-31
  • 打赏
  • 举报
回复
cout < < std::boolalpha < < ( str1==str2 ) < < '\n'; // false address of str1 != address of str 2
cout < < std::boolalpha < < ( str3==str4 ) < < '\n'; // 同上
cout < < std::boolalpha < < ( str5==str6 ) < < '\n'; // true "abc"会被编译器放到同一位置

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧