Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJuan Piñeiro Giménez Modificado hace 10 años
1
Programación III Clase 09 Apuntadores
2
Declaración de Punteros Declaración: type* id; Ejemplo: int* ptr; ptr contendrá entonces una dirección a un entero.
3
Operadores con Punteros OperadorUso &object Retorna la dirección de object (dirección de) *ptr Retorna a lo que apunta ptr (indirección)
4
Ejemplo de Operadores int normal = 10; int* ptr; ptr = &normal; *ptr = 15; cout<<ptr<<endl; cout<<normal<<endl; 0x3A28 normal 10 0x3F3A ptr 15 0x3A28 15
5
Retomando Arreglos En la siguiente declaración: int ar[4]; ¿Cuál será el tipo de ar ? Por lo tanto se podría hacer: int* p = NULL; p = ar;
6
Ejemplo double v[] = {2.5, 5.0, 7.5, 10.0}; double* pd = NULL; pd = v; 0xF150 pd ‘\0’ 0xF012 0xE412 v 0xF012 2.510.07.55.0 0xF0120xF01A0xF0220xF02A
7
Aritmética de Punteros double v[] = {2.5, 5.0, 7.5, 10.0}; double* pd = v; for (int i=0; i<4; i++){ cout << *pd << endl; pd++; } 0xF150 pd 0xF012 0xE412 v 0xF012 2.510.07.55.0 0xF0120xF01A0xF0220xF02A 0xA124 i 0 10xF01A 2.5 5.0 7.5 10.0 0xF02220xF02A30xF0324
8
Aritmética de Punteros (cont) Cuando a un double* se le suma 1, no se le suma 1 a la dirección, sino que avanza una casilla de double completa (8 bytes). Es por esta razón que pd que vale 0xF012 inicialmente al operar pd++ su valor es de 0xF01A. (Ojo la suma es hexadecimal) Ahora bien, en el ejemplo anterior: ¡ pd quedó apuntando afuera del arreglo!
9
Aritmética de Punteros (cont) double v[] = {2.5, 5.0, 7.5, 10.0}; double* pd = v; for (int i=0; i<4; i++) cout << *(pd+i) << endl; 0xF150 pd 0xF012 0xE412 v 0xF012 2.510.07.55.0 0xF0120xF01A0xF0220xF02A 0xA124 i 0 1 2.5 5.0 7.5 10.0 234
10
Aritmética de Punteros (cont) Al cambiar la instrucción de pd++, por *(pd+i) se logra imprimir todos los elementos del arreglo utilizando aritmética de punteros, pero esta vez sin cambiar pd en el proceso.
11
Aritmética de Punteros (cont) double v[] = {2.5, 5.0, 7.5, 10.0}; double* pd = v; for (int i=0; i<4; i++) cout << pd[i] << endl; 0xF150 pd 0xF012 0xE412 v 0xF012 2.510.07.55.0 0xF0120xF01A0xF0220xF02A 0xA124 i 0 1 2.5 5.0 7.5 10.0 234
12
Aritmética de Punteros (cont) CONCLUSIÓN: Esta es la manera en que el compilador interpreta el operador de subíndice de arreglos.
13
Ahora con Matrices Por ejemplo: int m[2][3] = {{1,3,5},{2,4,6}}; ¿Cuál es el tipo de m ? ¿Cuál es el tipo de m[0] ? ¿Cuál es el tipo de m[0][0] ? Entonces se podría: int** p = m; int* t = m[0]; //Algunos compiladores requieren conversión.
14
Con Matrices… int m[2][3] = {{1,3,5},{2,4,6}}; int* p = m[0]; for (int i=0; i<6; i++) cout << p[i] << endl; ¿Cuál será la salida de este segmento de código?
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.