为什么字符数组之间的比较不起作用?

时间:2014-01-03 11:12:55

标签: c++ arrays pointers operators

char a[1][2];
char b[1][2];

a[0][0] = 'a';
a[0][1] = 'b';
b[0][0] = 'a';
b[0][1] = 'b';

if(a[0] == b[0]){
   cout << "worked\n";
}

据我所知,字符数组之间的这种比较并不像你期望的那样工作。 if语句不会执行,因为条件a == b返回false。这是为什么?

2 个答案:

答案 0 :(得分:5)

在本声明中

if(a == b){
   cout << "worked\n";
}

a和b被隐式转换为指向相应数组的第一个元素的指针。所以有两个指针的比较。由于数组在内存中占据不同的区域,因此条件将等于假。

没有像数组比较这样的操作。要比较两个数组,您必须将数组的所有元素相互比较。例如,您可以使用标准算法std :: equal。例如

if( std::equal( std::begin( a ), std::end( a ), std::begin( b ) ) ){
   cout << "worked\n";
}

另一种方法是使用具有比较运算符的标准容器std :: array。例如

std::array<char, 2> a = { 'a', 'b' };
std::array<char, 2> b = { 'a', 'b' };

    if(a == b){
       cout << "worked\n";
    }

答案 1 :(得分:4)

您无法比较那样的数组。您需要迭代数组并依次比较每对元素。或者(并且最好)用std::vector替换静态数组。您展示的代码会比较指针 ab,这当然不相同。