admin 发表于 2016-1-25 21:26:18

(C/C++)字符串比较解析

      为什么 char str1[] = "abc"; char str2[] = "abc"; str1与str2不相等,
      两者不相等,是因为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是指指针自己的地址,所以两者地址是不相等的)。

页: [1]
查看完整版本: (C/C++)字符串比较解析