10
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

Asignatura: Lenguaje de Programación de Sistema 2014 PPT No. 03

  • Upload
    duy

  • View
    48

  • Download
    1

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

Asignatura: Lenguaje de Programación de Sistema 2014

PPT No. 03

Programa vespertino de Ingeniería (E) en Sistemas Computacionales

Profesor: José Estay ArayaSitio de la asignatura:

http://www.jiiea.com/SyPrgLan/User: sist2014 psw: sist#C10

Page 2: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

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 ........

Page 3: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

• Punteros: Idea básica#include <stdio.h>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);}

Page 4: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

• Resultados de la ejecución del programa anterior:

1204 =>|97| · · · · · dirección y dato de valor4562 => |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

Page 5: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

• 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:

Page 6: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

#include <stdio.h>

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);

}

Page 7: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

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

Page 8: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

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>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);

Page 9: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

Lo mismo anterior pero con método de punteros:

#include <stdio.h>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;}

Page 10: Asignatura: Lenguaje de Programación de Sistema  2014 PPT No.  03

FIN