ALGORITMOS Y ESTRUCTURA DE DATOS 1 ¿Qué es un PUNTERO?: Un puntero es una variable que apunta a otra variable. Esta variable almacena la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido de esa dirección de memoria. int x = 25; ... ... 25 ... ... ... ... Dirección 1502 1504 1506 1508 La dirección de la variable x (&x) es 1502 El contenido de la variable x es 25 PUNTEROS
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 1
¿Qué es un PUNTERO?:
Un puntero es una variable que apunta a otra variable. Esta
variable almacena la dirección de memoria de otra variable.
No hay que confundir una dirección de memoria con el
contenido de esa dirección de memoria.
int x = 25;
... ... 25 ... ... ... ...
Dirección 1502 1504 1506 1508
La dirección de la variable x (&x) es 1502
El contenido de la variable x es 25
PUNTEROS
A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 2
Las direcciones de memoria dependen de la arquitectura del
ordenador y de la gestión que el sistema operativo haga
de ella.
OPERADORES DE LOS APUNTADORES
Operador de dirección & Permite saber la dirección de
memoria de la variable:
&fnum representa la dirección de fnum.
Operador de contenido o indirección *
Si el operador * esta antes de la variable durante la
declaración, indica que esta declarando la variable tipo
puntero.
PUNTEROS
A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 3
Ejemplo
int *p, *q; // p y q son variables puntero que apunta a un
entero.
Si el operador * precede a una variable puntero (no en la
parte declarativa), indica que vamos acceder al dato de la
variable al cual apunta el puntero. Ejemplo
float *p, altura = 26.92;
p = &altura; //inicialización del puntero, p apunta a altura
cout<<altura<<endl // Escribe el valor de 26.92
cout<<*p<<endl; // Escribe el valor de altura, osea 26.92 ya
que p apunta la variable altura.
PUNTEROS
A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 4
Una variable puntero se declara como todas las variables.
Debe ser del mismo tipo que la variable apuntada. Su
identificador va precedido de un asterisco (*)
int *punt;
Es una variable puntero que apunta a una variable que
contiene un dato de tipo entero llamada punt.
char *car:
Es una variable puntero que apunta a una variable que
contiene un dato de tipo carácter llamada car.
Un puntero tiene su propia dirección de memoria: &punt
&car
PUNTEROS
A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 5
#include <iostream>
using namespace std;
int main()
{ int a, b, c, *p1, *p2;
p1 = &a; // Paso 1. La dirección de a es asignada a p1
*p1 = 1; // Paso 2. p1 (a) es igual a 1. Equivale a a = 1;
p2 = &b; // Paso 3. La dirección de b es asignada a p2
*p2 = 2; // Paso 4. p2 (b) es igual a 2. Equivale a b = 2;
p1 = p2; // Paso 5. El valor del p1 = p2
*p1 = 0; // Paso 6. b = 0
p2 = &c; // Paso 7. La dirección de c es asignada a p2
*p2 = 3; // Paso 8. c = 3
cout<<a<<b<<c<<endl; // Paso 9. ¿Qué se imprime?
}
PUNTEROS
A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 6
Paso a
0x22ff74
b
0x22ff70
c
0x22ff6c
p1
0x7c80b4cb
p2
0x304fc24
1 0x22ff74
2 1 0x22ff74
3 1 0x22ff74 0x22ff70
4 1 2 0x22ff74 0x22ff70
5 1 2 0x22ff70 0x22ff70
6 1 0 0x22ff70 0x22ff70
7 1 0 0x22ff70 0x22ff6c
8 1 0 3 0x22ff70 0x22ff6c
9 1 0 3 0x22ff70 0x22ff6c
PUNTEROS
A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 7
PUNTEROS Y ARRAYS
Sea el array de una dimensión:
int mat[ ] = {2, 16, -4, 29, 234, 12, 0, 3};
en el que cada elemento, por ser tipo int, ocupa dos bytes
de memoria.
Suponemos que la dirección de memoria del primer
elemento, es 1500:
&mat[0] es 1500
&mat[1] será 1502
&mat[7] será 1514
PUNTEROS
A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 8
PUNTEROS Y ARRAYS
int mat[ ] = {2, 16, -4, 29, 234, 12, 0, 3};
En total los 8 elementos ocupan 16 bytes.
Podemos representar las direcciones de memoria que ocupan los
elementos del array , los datos que contiene y las posiciones del array