Direccionamiento de Memoria Punteros en C Almacenamiento de Variables ● ● ● Una variable es la terna (tipo, referencia, valor) que identifica unívocamente a un objeto en un programa C La “referencia” es el nombre, que representa la dirección de memoria donde está almacenado el valor El “valor” es el contenido de la memoria asignada, y puede cambiar durante la ejecución del programa Almacenamiento: ejemplo int x; x=12; int *p1; p1 = &x; 0x00100 0x00101 0x00102 . . &x= 0x0104 . 0x01ffd 0x01ffe 0x01fff sizeof(x) es igual a 4 p1 es igual a 0x00104 *p1 es igual a 12 Aritmética de Punteros ● ● El compilador permite hacer operaciones aritméticas de suma (incremento) y resta (decremento) de punteros La operación se ejecuta respetando la naturaleza del puntero, es decir: Apuntador de char, su unidad de incremento/decremento será de 1 byte. Apuntador de short, su unidad de incremento/decremento será de 2 bytes. Apuntador de int, su unidad de incremento/decremento será de 4 bytes. Apuntador de double, su unidad de incremento/decremento será de 8 bytes. Ejemplo int primos[ ] = {1, 2, 3, 5, 7, 11, 13}; int *p = primos; int i; for( i=0; i < 7; i++) printf( *p++ ); Ajuste de Punteros: cast ● El tipo apuntado por un puntero puede ser redefinido por el programa: float *pF; *pF = 3.1415926; unsigned char * pC; pC = (unsigned char *) pF; printf(*pF); // Imprime “3.1415926” for (i=0; i< sizeof(float); i++) printf( *pC++) ; // Imprime cada byte