某题:
结果是:
false
false
true
为什么呢?
这里char * 不会产生内存,指向的是全局数据存放空间,所以str5,str6这里相等, char[]是从栈分配内存。
调试可以看到:
很明显,栈只能不断的分配空间给字符串,而不管是否重复
(gdb) p &str1[1]
$5 = 0x7fbffff781 "ello"
(gdb) n
11 cout << boolalpha << (str1 == str2) << str1 << " == " << str2 << endl;
(gdb) p &str2[1]
$6 = 0x7fbffff771 "ello"
(gdb) p &str5[1]
$10 = 0x400dcd "ello"
(gdb) p &str6[1]
$11 = 0x400dcd "ello"
查看程序段地址分配
#readelf -s test
0x400dcd 属于这段全局空间
94: 0000000000400838 1272 FUNC GLOBAL DEFAULT UND __gxx_personality_v0@@CXX