Почему char * и char ** имеют одинаковое значение? - PullRequest
0 голосов
/ 16 января 2019

Я написал этот код, который прост, так что я не понимаю, почему **str1 и **str2 одинаковы?

Код

#include <stdlib.h>
#include <stdio.h>

int main() {
    char *str1 = "Hey, you";
    char *str2 = malloc(11);
    strcpy(str2, "Hey! You");

    if (*str1 == *str2) {
        printf ("HoHoHo!");
    }

    return 0;
}

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Нигде в вашем коде нет **str1 and **str2. Я думаю, вы спрашиваете, почему это правда if (*str1 == *str2)? Этот код проверяет символ , на который указывают str1 и str2. Поскольку это 'H', в обоих случаях выражение оценивается как true.

Если вы хотите сравнить строки в стиле C, вы используете strcmp, который возвращает ноль, если две строки равны.

if (strcmp(str1, str2) == 0)
{
    printf ("HoHoHo!");
}
0 голосов
/ 17 января 2019

* перед символом означает нечто совершенно иное в объявлении и в теле функции.

int *x; - объявляет указатель на int объект

y = *x; - * разыменовывает указатель x, это противоположно его значению в объявлении. Он устраняет один уровень косвенности, когда в объявлении он добавляет один уровень.

Я думаю, что это причина вашего замешательства.

в вашем примере if (*str1 == *str2) * "удаляет" косвенность, и результатом является сам символ (не указатель на указатель)

0 голосов
/ 16 января 2019

str1 указывает на «Привет, ты».

str2 указывает на «Привет! Ты»

*str1 - это char по этому адресу . По сути, это первая буква строки: «H». Первая буква str2 также «H». Следовательно, (*str1 == *str2) является истинным выражением, потому что ('H' == 'H')

Для сравнения двух строк:

strcmp(str1, str2) - возвращает 0, если содержимое одинаковое, в противном случае - ненулевое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...