¿Se asigna memoria cuando se define el puntero? ¿Por qué? Nuestro profesor solo nos dijo que no se asignaba memoria al definir, pero no explicó por qué.
# include & ltstdlib.h & gt//Archivo de encabezado utilizado al asignar memoria
void main()
{
int a=20, * p; //Aquí se define un puntero entero, pero no se asigna ningún valor inicial. En este momento, llamamos a este puntero puntero salvaje.
printf(" % d-& gt; %p\n ", a, p); // Observe que %p está generando datos de dirección.
p = NULL
printf(" % d-& gt; %p\n ", a, p
p = &a;< /); p>
printf(" % d-& gt; %p:%d\n ", a, p, * p
p = (int *)malloc(sizeof(int ) );
printf(" % d-& gt; %p:%d\n ", a, p, * p
* p = 30
);printf(" % d-& gt; %p:%d\n ", a, p, * p
}
Mira atentamente este programa y Resultados de salida.
Si solo se define un puntero, el sistema no le asignará memoria sin la inicialización. Después de la inicialización, solo apunta a una determinada memoria y el puntero no inicializado apunta a una dirección de memoria desconocida. Estas indicaciones son muy peligrosas. En términos generales, cuando definimos una variable de puntero, se inicializará en nulo para evitar peligros irreversibles.
La línea 11 asigna memoria al puntero P. Esto lo especifica el lenguaje C y no hay ningún motivo.
Después de asignar memoria, ya no apunta a la dirección de memoria de la variable A, sino a una nueva dirección de memoria.