【正确答案】
【答案解析】两者不相等。因为str1和str2都是字符数组,每个都有自己的存储区,它们的值是各存储区的首地址。但有些情况却不一样,程序示例如下:
#include<iostream>
using namespace std;
int main()
{
const char str3[]="abc";
const char str4[]="abc";
const char* str5="abc";
const char* str6="abc";
cout<<boolalpha<<(str3==str4)<<endl;
cout<<boolalpha<<(str5==str6)<<endl;
return 0;
}
程序输出为
false
true
为什么上面程序示例的输出结果不都是false呢?上例中,str3和str4两个字符数组都存储在栈空间上,但两者地址值不相等。而str5和str6并非字符数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于常量区,str5和str6是指它们指向的地址的首地址,而它们自己仅是指向该区首地址的指针,所以相等(&str5和&str6是指指针自己的地址,所以两者地址是不相等的)。