100 likes | 353 Views
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: http://www.jiiea.com/SyPrgLan/ User : sist2014 psw : sist#C10. Punteros – Pointer en habla inglesa.
E N D
Asignatura: Lenguaje de Programación de Sistema 2014PPT No. 03 Programa vespertino de Ingeniería (E) en Sistemas Computacionales Profesor: José Estay Araya Sitio de la asignatura: http://www.jiiea.com/SyPrgLan/ 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 03 . ........O..... 13AA:0010 0E 0E 17 03 0E 0E 11 04-01 01 01 00 02 FF FF FF ................ 13AA:0020 FF FF FF FF FF FF FF FF-FF FF FF FF A0 0D 4E 01 ..............N. 13AA:0030 CE 12 14 00 18 00 AA 13-FF FF FF FF 00 00 00 00 ................ 13AA:0040 05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 13AA:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20 .!........... 13AA:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20 ..... 13AA:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00 ........
Punteros: Idea básica #include <stdio.h> main() { intvalor; /* 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 <stdio.h> main() { int*puntero; /* Un puntero. */ intvariable; /* 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 <stdio.h> intllameme(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); } intllameme(void) { return(5);
Lo mismo anterior pero con método de punteros: #include <stdio.h> voidllameme(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); } voidllameme(int *p) { *p = 5; }