Aqui traigo apuntes sobre unas sesiones de aprendizaje a tiempo real que me hizo un amigo mio, Diego. Voy completando los apuntes y los pondré aquí. Son simples, para gente que aún no sabe sobre ello.
Esta vez traigo sobre los punteros, luego colocaré el de sobre las estructuras. Repito: no es nada muy extendido, es lo muy básico y puede servir de referencia.
Las variables se almacenan en la memoria. La ventaja es que el acceso a la memoria es muy rápido, por lo que puedes leer variables y tambien escribirlas. Si en cambio se usa el disco duro para almacenar variables, sería mucho mas lento.
El lugar donde se guarda la variable en la memoria se puede identificar por un valor. Y C/C++ tiene la capacidad de acceder directamente a la memoria, conociendo el valor que indica donde se encuentra.
Un puntero se declara usando el * .
Por ejemplo para declarar una variable haces lo siguente:
- Código: Seleccionar todo
int variable ;
Y para declarar un puntero se hace así:
int *variable ;
Con esto se declara un puntero que apunta a un tipo de variable int, es decir, que el puntero contendrá la direccion en la memoria de una variable tipo int.
Existe tambien este poerador, que es el &, este operador devuelve la direccion en la memoria donde se encuentra la variable. Lo usariamos de esta manera, despues de crear un puntero llamado 'puntero' y una variable llamada 'variable', los dos de tipo int:
- Código: Seleccionar todo
puntero = &variable ;
Con esto, en el puntero se almacenaria la direccion en la memoria donde se encuetra la variable.
Aqui un ejemplo:
- Código: Seleccionar todo
int main()
{
//Declaramos una variable tipo int
int variable ;
//Definimos la variable
variable = 5 ;
//Declaramos el puntero, que apunta a un tipo int
int *puntero ;
//Definimos el puntero
puntero = &variable ; //Como ya se a dicho, el operador & devuelve la direccion en la memoria donde se encuentra la variable y la almacena en el puntero
//Mostrar la direccion en la memoria de variable
printf("&variable == %d\n", &variable) ;
//Mostrar la direccion en la memoria a la que apunta el puntero, que es el mismo que a donde apunta la variable
printf("puntero == %d\n", puntero) ;
//Mostrar el valor de la variable
printf("variable == %d\n", variable) ;
//Mostrar el valor que se encuentra en el lugar de la memoria donde apunta el puntero, que es el mismo que la variable, ya que este puntero apunta al lugar donde esta se encuentra.
printf("(*puntero) == %d\n", (*puntero)) ;
return 1 ;
}
Como ya se a dicho, todas las variables se almacenan en un cierto lugar de la memoria. Este lugar se identifica con un valor que en este caso se guarda en el puntero. El lugar donde se encuentra una variable en la memoria se encuentra usando el operador & por delante de la variable, es decir, si haces &variable obtendras el lugar donde se encuentra la variable en la memoria. Un puntero es directamente un lugar de la memoria, se dice que un puntero apunta a un lugar en la memoria.
Al usar el * en un puntero, obtienes el valor que se encuentra en la memoria donde apunta el puntero.
Ahora prueba a añadir esto antes del codigo de mostrar el valor de la variable:
- Código: Seleccionar todo
*puntero = 1 ;
De esta manera cambias la variable a 1. Prueba y veras que es lo que cambia. Al modificar el puntero, tambien modificas directamente el valor de la memoria. Segu el compilador que uses, seguramente se cierre enseguida el programa y no podras ver el cambio, asi que añade
- Código: Seleccionar todo
getchar() ;
Tambien podeis hacer lo siguiente:
en vez de esto
- Código: Seleccionar todo
puntero = &variable ;
puedes utilizar tambien esto
- Código: Seleccionar todo
*(&variable) ;
saludos