Asignatura: Lenguaje de Programación de Sistema 2014 PPT No. 03 Programa vespertino de Ingeniería (E) en Sistemas Computacionales Profesor: José Estay Araya Sitio de la asignatura: User: sist2014 psw: sist#C10
Punteros – Pointer en habla inglesa Punteros = apuntadores a memoria Direcciones de memoria Contenido de memoria Vaciado de un sector de memoria, mostrando direcciones segmentadas(modo real) y los contenidos correspondientes: 13AA:0000 CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 0E 0E 8A O AA:0010 0E 0E E 0E FF FF FF AA:0020 FF FF FF FF FF FF FF FF-FF FF FF FF A0 0D 4E N. 13AA:0030 CE AA 13-FF FF FF FF AA: AA:0050 CD 21 CB ! AA: AA:
Punteros: Idea básica #include main() {int valor; /* Una posición de memoria para guardar un carácter. */ int *puntero; /* Un puntero. */ valor = 97; printf("%u => | %d | <= direccion y datos de valor.\n", &valor,valor); puntero = &valor; printf("%u => | %d | <= direccion y datos de puntero.\n", &puntero,puntero); printf("\n Valor almacenado en puntero = %d\n",puntero); printf(" Direccion de puntero : &puntero = %u\n",&puntero); printf(" Valor referenciado por puntero: *puntero = %d\n", *puntero); }
Resultados de la ejecución del programa anterior: 1204 =>|97| · · · · · dirección y dato de valor 4562 => |1204| · · · · · dirección y dato de puntero Compilando con Visual C/C++ Express Edition 2010…ver resultados! (Configurar Win32 CONSOLE APLLICATION, EMPTY PROJECT, con Character Set = NOT SET) para poder compilar nativo
Se puede modificar el valor de una variable mediante el uso de punteros Esto permite pasar mas de un valor desde una función invocada hacia la función que la invocó El programa a continuación ilustra este caso:
#include main() { int *puntero; /* Un puntero. */ int variable; /* Una posición para guardar un valor. */ variable = 1; puntero = &variable; printf("Valor almacenado en variable = %d\n", variable); printf("Valor almacenado en puntero = %d\n", puntero); *puntero = 2; printf("Nuevo valor almacenado en variable = %d\n", variable); printf("Valor almacenado en puntero = %d\n", puntero); }
Resultado de la ejecución del código anterior Valor almacenado en variable = 1 Valor almacenado en puntero = 7732 Nuevo valor almacenado en variable = 2 Valor almacenado en puntero = 7732
Paso de variables con puntero. Se muestra otro método para pasar un valor desde la función llamada a la función que la invoca: el uso de punteros En lo que se había visto anteriormente: #include int llameme(void); /* Función invocada desde main. */ main(){ int x; /* Variable que recibe lo devuelto por la función */ x = llameme(); printf("El valor de x es: %d",x); return(0); } int llameme(void) { return(5);
Lo mismo anterior pero con método de punteros: #include void llameme(int *p); main() {int x; x = 0; printf("El valor de x es %d\n", x); llameme(&x); printf("El nuevo valor de x es %d\n", x); } void llameme(int *p) { *p = 5; }
FIN