求教

小陈程序员 2014-07-02 11:55:42
char str[] = "test";
char str2[] = "test";

const char str3 = "test";
const char str4 = "test";

cout << "(str==str2)" << (str3==str4) << endl;

//求教,为什么答案是false,false,求教
...全文
188 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小陈程序员 2014-07-05
  • 打赏
  • 举报
回复
引用 7 楼 hungryfooleric 的回复:
1.char str1[]=“test”;这个过程是,在数据区上申请一个大小为5的arrary,用str1指示这段内存的首地址。第二句同样完成这一功能,但是操作系统不可能再用相同的内存区存str2,因为它已经被str1占有了。这时os就轮询新的内存,赋给这个array,返回str2.这样比较,自然是不同的地址,返回为false。 2.后面是同样的赋值过程,只不过加了个const表明这块区域是不可rewrite的,但是os并无法保证这个arrary是唯一的,我可以申请无数个这样的array,这一动态申请过程,os真的没办法对同一块内存,做两次=操作。而且你可以做个实验来说明,如果这个const是函数的参数,那它会因为是const的,而被放入寄存去,你看看这2个在寄存器中反汇编后的值,就一目了然了。
感谢大神的回答,好人一生平安……
FightForProgrammer 2014-07-02
  • 打赏
  • 举报
回复
你比较的是地址,不是字符串,字符串比较用strcmp
赵4老师 2014-07-02
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
hungryfooleric 2014-07-02
  • 打赏
  • 举报
回复
1.char str1[]=“test”;这个过程是,在数据区上申请一个大小为5的arrary,用str1指示这段内存的首地址。第二句同样完成这一功能,但是操作系统不可能再用相同的内存区存str2,因为它已经被str1占有了。这时os就轮询新的内存,赋给这个array,返回str2.这样比较,自然是不同的地址,返回为false。 2.后面是同样的赋值过程,只不过加了个const表明这块区域是不可rewrite的,但是os并无法保证这个arrary是唯一的,我可以申请无数个这样的array,这一动态申请过程,os真的没办法对同一块内存,做两次=操作。而且你可以做个实验来说明,如果这个const是函数的参数,那它会因为是const的,而被放入寄存去,你看看这2个在寄存器中反汇编后的值,就一目了然了。
ForestDB 2014-07-02
  • 打赏
  • 举报
回复
str == str2比较的是两个的地址 const char str3 = "test";是把"test"的地址cast成const char,这个cast多半是有问题的。
brookmill 2014-07-02
  • 打赏
  • 举报
回复
const char str3 = "test"; const char str4 = "test"; 如果这个代码真的没写错,那就是要把常量字符串的地址转换成char然后赋值。如果是按c语言编译,应该会有warning,str3会等于str4。我用g++按c++编译结果直接error
小陈程序员 2014-07-02
  • 打赏
  • 举报
回复
引用 3 楼 zan389600651 的回复:
楼上说的是对的。 楼主的3.4行代码是不是写错了? 应该是: const char *str3 = "test"; const char *str4 = "test"; 这样str3 == str4 ,这个应该为true。
你说的是对的,但是我的代码没写错哦,就是那样写的
zan389600651 2014-07-02
  • 打赏
  • 举报
回复
楼上说的是对的。 楼主的3.4行代码是不是写错了? 应该是: const char *str3 = "test"; const char *str4 = "test"; 这样str3 == str4 ,这个应该为true。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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