C++ 笔试题 以下三条输出语句分别输出什么

char str1[] = "abc";r92
char str2[] = "abc";!U{T
const char str3[] = "abc"; k
const char str4[] = "abc"; [EE#+T
const char* str5 = "abc";Es>T
const char* str6 = "abc";Dl,{e#
cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?M6ri]
cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?f(#'5
cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?+j'
谢谢,我想知道具体的原因
str5==str6 为什么相等,常量字符号串指针指向内容相同? 还是指向了同一各内存区域?我是菜鸟,望指教

int main()
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << ( str1==str2 ) << endl; //
cout << boolalpha << ( str3==str4 ) << endl; //
cout << boolalpha << ( str5==str6 ) << endl; //
/*分别输出字符串的地址*/
printf("%p\t%p\n",str1,str2);
printf("%p\t%p\n",str3,str4);
printf("%p\t%p\n",str5,str6);
return 0;
}
你可以看出str1,str2地址不相同,str3,str4地址不相同,str5,str6地址相同。
str1,str2,str3,str4位于栈区,向低地址增长。
str5,str6位于只读数据段,所以地址相同。

参考资料:深入理解计算机系统第7章链接,程序中的内存组织

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-05
false
false
true

在C里“==”就是判断用的,返回值只有true 或者 false

这里分头判断
str1和str2 是否相等 相等返回真true 不相等返回false
str3和str4 是否相等 相等返回真true 不相等返回falses
tr5和str6 是否相等 相等返回真true 不相等返回false
第2个回答  2008-11-05
false
false
true
相似回答