char * str; ул = «HELLO»; Как это работает без выделения памяти для строки?

Код:

    #include 
    int main() {
        char *str;
        char i = 'a';
        str = &i;
        str = "Hello";
        printf("%s, %c, %x, %x", str, i, str, &i);
        return 0;
    }

Я получаю этот вывод:

Hello, a, 403064, 28ff0b

У меня следующие два сомнения:

Как я могу сохранить строку без выделения памяти для нее.str является символьным указателем и указывает, где переменная chari, Когда я добавлюstr = "Hello"; Арен»т я использую5 байты из этого места4 из которых не выделены?

С тех пор, я кодstr = &i; не долженstr а также&i имеют то же значение, когда я печатаю их? Когда я удаляюstr = "Hello"; заявлениеstr а также&i такие же. И еслиstr а также&i то же самое, то я верю, когда я говорюstr = "Hello" это должно переписать'a' с'H' и остальное'ello\0' войти в последующие байты.

Я считаю, что вся проблема сstr = "Hello" заявление. Это некажется, работает так, как я думаю.

Пожалуйста, кто-нибудь объясните, как это работает ??

Ответы на вопрос(7)

Ваш ответ на вопрос