2 yekailing yekailing 于 2016.09.08 22:38 提问

c++中char指针问题(和钱能的c++程序设计教程结果不一样)

代码:
/*

  • f0303.cpp *
  • Created on: 2016年9月8日
  • Author: Administrator */ # include using namespace std;

int main() {

cout<<("join" == "join" ? "" : "not ")<<"equal\n";

char* str1 = "good";
char* str2 = "good";
cout<<(str1 == str2 ? "" : "not ")<<"equal\n";
char buffer1[6] = "Hello";
char buffer2[6] = "Hello";
cout<<(buffer1 == buffer2 ? "" : "not ")<<"equal\n";

return 0;

}

运行结果:
equal
equal
not equal

3个回答

caozhy
caozhy   Ds   Rxr 2016.09.08 23:16

char* str1 = "good";
char* str2 = "good";
这个属于编译器未定义行为,也就是作为常量的good,编译器产生一个,两个都指向那个,还是产生两个,这个不同的编译器实现不同,结果不同。

hijack00
hijack00   Rxr 2016.09.09 08:50

我在3个不同的mingw版本下测试都是这个结果。在linux gcc上应给也是这个结果。没装VS,没有在上面测试过。
第1个和第3个输出结果没有争议,这里最核心的是滴2个输出结果。正常来说,对于常量字符串,应该在常量区只有一份,程序中的变量都只有它的一个引用。所以这个结果从理论上分析也是没问题的。

wzxq123
wzxq123   Rxr 2016.09.08 22:45

("join" == "join" ? "" : "not ") ===>"join" == "join"结果为true,选择“”即没有输出;
<<"equal\n"; ===>此处输出equal(即第一个equal)
(str1 == str2 ? "" : "not ") ===>此时str1余str2相等,输出为空,也是后面的语句:<<"equal\n";输出了第二个equal;
前面两个str都是指向同一个字符串“good”
(buffer1 == buffer2 ? "" : "not ")===>此处两个buffer地址并不相同,buffer1 == buffer2结果是false,输出not;
后面的equal输出同上。这里的buffer虽然内容相同,但是存储内容的内存是不同的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!