@paroletatel

В чём суть сравнения массивов типа char на C?

Есть код:
int main()
{
    char str1[5] = {'a','b','c','d'};
    char str2[5] = {'a','b','c','d'};
    char str3[5] = {'a','b','c','d'};
    
    if(str1<str2)
    {
        printf("1");
    }
    else
    {
        printf("2");
    }
    
    if(str3>str2)
    {
        printf("1");
    }
    else
    {
        printf("2");
    }
}

Соответственно, интерпретатор выдает: 11, при его выполнении. Из этого можно понять, что не смотря на равенство этих массивов с точки зрения лексикографического сравнения, интерпретатор считает, что чем позже создан массив, тем он больше.
Из этого можно сделать вывод о том, сравнивается непосредственно память, выделенная под этот массив, или нечто иное, а не проводится лексикографическое сравнение, иначе массивы были бы равны.

Объясните, пожалуйста, на этом примере суть использования памяти под массивы, и что же всё-таки такое: сравнение массивов char на C?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
@galaxy
Вы сравниваете указатели (почитайте по них в любой книжке про C).
Указатели - это адреса, на 64-битной системе представляемые 64-битными положительными числами. Как именно и в каком порядке им выдаются значения - внутреннее дело компилятора, но, как правило, адреса переменных на стеке действительно идут в порядке их объявления.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Senior .NET developer
Вы сами поняли. Тут сравнивается память хотите сравнивать значения сравнивайте их

В более навороченных языках немного хитрее, например в c# для скорости строки неизменные и хранятся в области памяти и дубликаты имеют один адрес
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы