В этом заявлении
if(a == b){
cout << "worked\n";
}
а и б неявно преобразуются в указатели на первые элементы соответствующих массивов. Таким образом, существует сравнение двух указателей. Поскольку массивы занимают разные области памяти, тогда условие будет равным ложному.
Нет такой операции, как сравнение для массивов. Чтобы сравнить два массива, вы должны сравнить все элементы массивов друг с другом. Например, вы можете использовать стандартный алгоритм 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";
}
Вы сравниваете адреса памяти ... Они представляют собой ОЧКИ. – opalenzuela
адреса памяти различны для массивов a и b. – CreativeMind
Исправление: они ** распадаются ** на указатели. В любом случае, это было унаследовано от C. Для кода, который больше похож на C++, используйте 'std :: string'. – chris