char * str; str = “OLÁ”; Como isso funciona sem alocar memória para a string?

Código:

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

Eu recebo esta saída:

Hello, a, 403064, 28ff0b

Eu tenho duas dúvidas:

Como posso armazenar uma string sem alocar memória para ela.str é um ponteiro de caractere e está apontando para onde char variáveli. Quando eu adicionostr = "Hello"; não estou usando5 bytes desse local4 dos quais não são atribuídos?

Desde então, eu codificostr = &i; não deveriastr e&i tem o mesmo valor quando eu os imprimo? Quando eu remover ostr = "Hello"; declaraçãostr e&i são iguais. E sestr e&i são mesmo então eu acredito quando digostr = "Hello" deve sobrescrever'a' com'H' e o resto'ello\0' entrar nos bytes subseqüentes.

Eu acredito que todo o problema é comstr = "Hello" declaração. Não parece estar funcionando como eu penso.

Por favor, alguém explique como funciona?

questionAnswers(7)

yourAnswerToTheQuestion