Documente Academic
Documente Profesional
Documente Cultură
Contenidos
1. Introduccin a las variables puntero 2. Repaso:
- operador de direccin: & - referencias
5. Valor apuntado por un puntero: Indireccin de punteros 6. Aritmtica de punteros 7. Relacin entre Arrays y punteros 8. Cadenas y punteros. 9. Punteros a estructuras.
1
= p
102 101
= x
101 100
a g 0000001
Para conocer la direccin de memoria donde se encuentra almacenada la variable, se puede utilizar el operador &.
cout << x; cout << &x;
MEMORIA
3
101 100
a g 0000001
=z = x
MEMORIA
4
int main() { char x = a; char & z = x; cout << x << z; z = b; cout << x << z; ... return 0; }
// x tambin vale b
Introduccin a variables de tipo Puntero (Apuntadores) Declaracin de una variable de tipo puntero
Para declarar una variable de tipo puntero, se utiliza el smbolo *. Adems, la declaracin de una variable de tipo puntero debe indicar al compilador el tipo de dato al que apunta el puntero.
Sintaxis <tipo> * <nombre_del_puntero> ; 999 998 997
Direccin de memoria alta
GUARRERIA
=p =r
As, podemos hablar de puntero a entero, puntero a char, puntero a float, etc.
char *p ; int *r ; Como para el resto de variables, C++ no inicializa automticamente los punteros.
102 101
=x
Direccin de memoria baja
Introduccin a variables de tipo Puntero (Apuntadores) Inicializacin de una variable de tipo puntero
Es preciso inicializar las variables de tipo puntero antes de su uso. La inicializacin proporciona al puntero una direccin de memoria a la que apuntar. Direccin de A) Inicializar un puntero a una direccin nula.
memoria alta
char *p = NULL ; El puntero NULL apunta a la direccin 0. El puntero NULL no es una direccin de una variable en memoria. El puntero nulo proporciona al programa una manera de saber si un puntero apunta a una direccin vlida. p
6
=p =r
102 101
||
=x
Direccin de memoria baja
NULL
Introduccin a variables de tipo Puntero (Apuntadores) Inicializacin de una variable de tipo puntero
Para poder usar el puntero nulo NULL, podemos hacer una de stas dos cosas: - definirlo en la cabecera de nuestro programa:
# define NULL 0
Introduccin a variables de tipo Puntero (Apuntadores) Inicializacin de una variable de tipo puntero
B) Inicializar un puntero a una direccin de memoria vlida Para asignar una direccin de memoria a un puntero, se utiliza el operador de direccin &.
El operador & aplicado a una variable, devuelve la direccin donde se almacena dicha variable. &x = 101
char *p = NULL; char x = a; p = &x ; Direccin de memoria alta
101 0
=p =r
=x
p
8
NULL
x a
Introduccin a variables de tipo Puntero (Apuntadores) Inicializacin de una variable de tipo puntero
B) Inicializar un puntero a una direccin de memoria vlida La inicializacin tambin se puede hacer en la declaracin.
char x = a; char *p = &x ;
=p
x= 100
a g 0000001
Error ! MEMORIA
x a
& * *
10
Operador de direccin: Obtiene la direccin de una variable Declara una variable puntero. Operador de indireccin. Obtiene el valor apuntado por el puntero.
101 100
50 5 0000001
=x =y
p
11
MEMORIA
NULL NULL
=p2 =p1
100 101
A A ?
=c2 =c1
MEMORIA
12
NULL
z y x
2 2 9 11 NULL
q r
NULL
13
Es correcto ?
El puntero p se inicializa despus de sus 2 primeros usos. Si en vez de hacer una lectura, hubisemos hecho una escritura, *p=9, el resultado podra haber sido fatal, ya que podramos haber accedido a posiciones de memoria indebidas. Hay que tener cuidado con no dejar un puntero sin inicializar
14
1 2
...
MEMORIA
15
p_cd
1 2
...
cd1
cd2
16
char letras[4];
107 a
100 101 102
b
103
43
63
...
...
...
Cuando declaramos una variable de tipo array, lo que en realidad estamos haciendo es crear un puntero constante cuyo nombre no ocupa memoria.
cout << letras[0]; cout << letras [1]; cout << letras[3]; cout << *letras; cout << *(letras+1); cout << *(letras+3);
equivale a :
17
Introduccin a variables de tipo Puntero (Apuntadores) Relacin entre arrays y punteros. Ejemplo:
p
(3)
p = v; p = v+2; p = &v[1]; v = p;
(2)
5
(1)
0 6
v[1] =v
18
19
nombre_completo
=
C a
\0
\0
\0
nombre
20
apellido
21
1
"18 Tracks" 18 20,5 "12122001"
..
p
disco *p = NULL; p = mis_cds;
NULL
for (int i = 0; i<10; i++) { cout << (*p).titulo; cout << (*p).precio; p++; }
for (int i = 0; i<10; i++) { cout << p->titulo; cout << p->precio; p++; }
22
NULL
NULL
int x = 10, y = 5, z; int *p, *q, *r; r = &z; *r =x; q = &x; *q =*r+4; p=r; *p=*q + *r + y ; cout << x; cout << y; cout << z;
24
25