-----
A ver, un puntero es una variable que almacena una referencia a la dirección de memoria de otra variable.
Al declarar una variable, a esta se le asigna un espacio en la memoria del sistema en donde se guarda su valor.
int num = 15;
Ese espacio corresponde a una dirección de memoria, y esa dirección es representada como un número hexadecimal, por ejemplo, 0x1000 que es 4096 en decimal.
En dicha dirección se guarda el valor de nuestra variable num en formato hexadecimal, por lo que 15 se almacena como 0xf, ya que 15 en hexadecimal es representado con la letra f.
En C un puntero se declara anteponiendo el símbolo * al nombre del puntero. Y para asignarle la dirección de memoria de una variable, se antepone el símbolo & al nombre de la variable.
Por ejemplo, a continuación se declara un puntero de tipo entero llamado pnum al que se le asigna la dirección de memoria de la variable num.
int *pnum = #
Una cosa importante a tener en cuenta es que el símbolo * también nos sirve para acceder al contenido que está almacenado en la dirección de memoria a la que apunta el puntero.
Por ejemplo, a continuación se declara un número entero llamado n al que se le asigna el puntero *pnum.
int n = *pnum;
Y al imprimir el valor de la variable n obtenemos 0xf, que es como se guardó el número entero 15 en la memoria.
0xf
A continuación un programa en donde se usan los punteros:
punteros.c
#include <stdio.h>
int main(void) {
// declarando un número entero llamado "num" al que se le asigna el valor 15.
int num = 15;
// declarando un puntero entero llamado "pnum" al que se le asigna la dirección de memoria de num.
int *pnum = &num;
// declarando un número entero llamado "n" al que se le asigna el valor de la variable al que apunta el puntero.
int n = *pnum;
// imprimiendo la dirección de memoria del puntero.
printf("%p\n", &num);
// imprimiendo el valor al que apunta el puntero, 0xf == 15.
printf("%p\n", *pnum);
printf("%p\n", y);
return 0;
}
Como salida obtengo:
0x7ffe9c0a0798 0xf 0xf