Snatcher10 escribió:Vale, lo que creo entender es que esa dirección de memoria ya estaba asignada de antemano por el SO, yo intento cambiar lo que hay en esa dirección de memoria y el SO no me lo permite.
@jorcoval¿Y por qué me siempre me aparece el caracter A en la dirección de memoria 65?
https://conceptodefinicion.de/ascii/
No, no has asignado nada.
Para asignar memorita tienes que hacer un malloc:
char *c = malloc(sizeof(char));
esto reserva memoria y te devuelve la dirección de memoria donde se ha reservado.
Entonces ahora puedes acceder a esa memoria. Pero recuerda que un puntero guarda la dirección de memoria, no el contenido. Si quieres acceder al contenido, usas el asterisco:
*c = 'A';
Recuerda, char es un paquete de datos. char* es la dirección de memoria donde se aloja ese paquete.
Puedes acceder a la dirección de memoria de una variable ya creada con el &
char c = 'A'; //creamos variable
char* puntero_c = &c; //asignamos la dirección de memoria donde se encuentra la variable c al puntero
*puntero_c = 'B'; //cambiamos el contenido del puntero.
cuando creas una variable se asigna automaticamente una dirección de memoria, por eso no tienes que hacer un malloc si utilizas el puntero para apuntar a una dirección de memoria de una variable ya existente. con & devuelves esa dirección de memoria. Si la dirección de memoria no existe (no ha sido reservada por la aplicación), peta.
Pero eso ya es memoria dinámica, y hablamos de meternos en un berenjenal del quince.