char * str; str = "HOLA"; ¿Cómo funciona eso sin asignar ninguna memoria para la cadena?

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;
    }

Obtengo esta salida:

Hello, a, 403064, 28ff0b

Tengo dos dudas siguientes:

¿Cómo puedo almacenar una cadena sin asignar ninguna memoria para ello.str es un puntero de carácter y apunta a donde variable chari. Cuando agregostr = "Hello"; no estoy usando5 bytes de esa ubicación4 de los cuales no se asignan?

Desde entonces, codificostr = &i; no deberíastr y&i ¿Tienes el mismo valor cuando los imprimo? Cuando quito elstr = "Hello"; declaraciónstr y&i son idénticos. Y sistr y&i son lo mismo entonces creo cuando digostr = "Hello" debería sobrescribir'a' con'H' y el resto'ello\0' entrar en los bytes posteriores.

Creo que todo el problema es constr = "Hello" declaración. No parece estar funcionando como lo que pienso.

Por favor alguien explique como funciona ??

Respuestas a la pregunta(7)

Su respuesta a la pregunta