PDF de programación - 9A Punteros y memoria dinámica - Fundamentos de la programación

Imágen de pdf 9A Punteros y memoria dinámica - Fundamentos de la programación

9A Punteros y memoria dinámica - Fundamentos de la programacióngráfica de visualizaciones

Actualizado el 15 de Junio del 2021 (Publicado el 1 de Febrero del 2021)
464 visualizaciones desde el 1 de Febrero del 2021
1,4 MB
22 paginas
Creado hace 10a (04/09/2013)
Fundamentos de la programación

9A

Grado en Ingeniería Informática
Grado en Ingeniería del Software
Grado en Ingeniería de Computadores
Facultad de Informática
Luis Hernández Yáñez
Universidad Complutense

Aritmética de punteros
Recorrido de arrays con punteros
Referencias
Listas enlazadas

940
953
962
964

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 940

Operaciones aritméticas con punteros

int dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
typedef int* tIntPtr;
tIntPtr punt = dias;

La aritmética de punteros es una aritmética un tanto especial...
Trabaja tomando como unidad de cálculo el tamaño del tipo base
puntempieza apuntando al primer elemento del array:
punt++hace que puntpase a apuntar al siguiente elemento
A la dirección de memoria actual se le suman tantas unidades
como bytes (4) ocupe en memoria un dato de ese tipo (int)

cout << *punt << endl; // Muestra 31 (primer elemento)
punt++;

cout << *punt << endl; // Muestra 28 (segundo elemento)

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 941

int dias[12] = { 31, 28, 31, 30, 31, 30, 

31, 31, 30, 31, 30, 31 };

typedef int* tIntPtr;
tIntPtr punt = dias;

dias[0]

dias[1]

dias[2]

dias

punt

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
0F03:1A42
0F03:1A43
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
...

3131

2828

3131

0F
03
1A
38
0F
03
1A
38

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 942

int dias[12] = { 31, 28, 31, 30, 31, 30, 

31, 31, 30, 31, 30, 31 };

typedef int* tIntPtr;
tIntPtr punt = dias;
punt++;

dias[0]

dias[1]

dias[2]

punt‐‐hace que apunte al elemento anterior

dias

punt

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
0F03:1A42
0F03:1A43
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
...

3131

2828

3131

0F
03
1A
38
0F
03
1A
3C

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 943

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

int dias[12] = { 31, 28, 31, 30, 31, 30, 

31, 31, 30, 31, 30, 31 };

typedef int* tIntPtr;
tIntPtr punt = dias;
punt = punt + 2;

Restando pasamos a elementos anteriores

dias[0]

dias[1]

dias[2]

dias

punt

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
0F03:1A42
0F03:1A43
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
...

3131

2828

3131

0F
03
1A
38
0F
03
1A
40

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 944

int dias[12] = { 31, 28, 31, 30, 31, 30, 

31, 31, 30, 31, 30, 31 };

typedef int* tIntPtr;
tIntPtr punt = dias;
punt = punt + 2;

Nº de elementos entre los punteros

int num = punt ‐ dias;

dias[0]

dias[1]

dias[2]

dias

punt

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
0F03:1A42
0F03:1A43
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
...

3131

2828

3131

0F
03
1A
38
0F
03
1A
3C

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 945

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

short int(2 bytes)

Otro tipo base

short int dias[12] = {31, 28, 31, 30,

31, 30, 31, 31, 30, 31, 30, 31};

typedef short int* tSIPtr;
tSIPtr punt = dias;

dias[0]

dias[1]

dias[2]

dias[3]

dias[4]

dias

punt

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
...

3131
2828
3131
3030
3131

0F
03
1A
38
0F
03
1A
38

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 946

short int dias[12] = {31, 28, 31, 30,

31, 30, 31, 31, 30, 31, 30, 31};

typedef short int* tSIPtr;
tSIPtr punt = dias;
punt++;

dias[0]

dias[1]

dias[2]

dias[3]

dias[4]

dias

punt

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
...

3131
2828
3131
3030
3131

0F
03
1A
38
0F
03
1A
3A

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 947

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

short int dias[12] = {31, 28, 31, 30,

31, 30, 31, 31, 30, 31, 30, 31};

typedef short int* tSIPtr;
tSIPtr punt = dias;
punt++;
punt = punt + 3;

dias[0]

dias[1]

dias[2]

dias[3]

dias[4]

dias

punt

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
...

3131
2828
3131
3030
3131

0F
03
1A
38
0F
03
1A
40

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 948

short int dias[12] = {31, 28, 31, 30,

31, 30, 31, 31, 30, 31, 30, 31};

typedef short int* tSIPtr;
tSIPtr punt = dias;
punt++;
punt = punt + 3;
punt‐‐;

dias[0]

dias[1]

dias[2]

dias[3]

dias[4]

dias

punt

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
...

3131
2828
3131
3030
3131

0F
03
1A
38
0F
03
1A
3E

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 949

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

short int dias[12] = {31, 28, 31, 30,

31, 30, 31, 31, 30, 31, 30, 31};

typedef short int* tSIPtr;
tSIPtr punt = dias;
punt++;
punt = punt + 3;
punt‐‐;
tSIPtr punt2;

dias[0]

dias[1]

dias[2]

dias[3]

dias[4]

dias

punt

punt2

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
0F07:041F

3131
2828
3131
3030
3131

0F
03
1A
38
0F
03
1A
3E
?

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 950

short int dias[12] = {31, 28, 31, 30,

31, 30, 31, 31, 30, 31, 30, 31};

typedef short int* tSIPtr;
siPtr punt = dias;
punt++;
punt = punt + 3;
punt‐‐;
tSIPtr punt2;
punt2 = dias;

dias[0]

dias[1]

dias[2]

dias[3]

dias[4]

dias

punt

punt2

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
0F07:041F

3131
2828
3131
3030
3131

0F
03
1A
38
0F
03
1A
3E
0F

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 951

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

short int dias[12] = {31, 28, 31, 30,

31, 30, 31, 31, 30, 31, 30, 31};

typedef short int* tSIPtr;
siPtr punt = dias;
punt++;
punt = punt + 3;
punt‐‐;
tSIPtr punt2;
punt2 = dias;
cout << punt – punt2; // 3

33

dias[0]

dias[1]

dias[2]

dias[3]

dias[4]

dias

punt

punt2

...
0F03:1A38
0F03:1A39
0F03:1A3A
0F03:1A3B
0F03:1A3C
0F03:1A3D
0F03:1A3E
0F03:1A3F
0F03:1A40
0F03:1A41
...
0F07:0417
0F07:0418
0F07:0419
0F07:041A
0F07:041B
0F07:041C
0F07:041D
0F07:041E
0F07:041F

3131
2828
3131
3030
3131

0F
03
1A
38
0F
03
1A
3E
0F

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 952

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 953

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Punteros como iteradores para arrays

arraypunt.cpp
arraypunt.cpp

const int MAX = 100;
typedef int tArray[MAX];
typedef struct {

tArray elementos;
int cont;

} tLista;
typedef int* tIntPtr;
tLista lista;

Usamos un puntero como iteradorpara recorrer el array:

tIntPtr punt = lista.elementos;
for (int i = 0; i < lista.cont; i++) {

cout << *punt << endl;
punt++;

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

}

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 954

...
intPtr punt = lista.elementos;

puntpunt

lista.elementos
lista.elementos

0
4

1
13

2
3

4

3
5
47 53 19

6
7

7
48

8

...

98

99

lista.cont
lista.cont

8

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 955

...
for (int i = 0; i < lista.cont; i++) {

cout << *punt << endl;
punt++;

ii

0

puntpunt

lista.elementos
lista.elementos

0
4

1
13

2
3

4

3
5
47 53 19

6
7

7
48

8

...

98

99

lista.cont
lista.cont

8

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 956

...
for (int i = 0; i < lista.cont; i++) {

44

cout << *punt << endl;
punt++;

ii

1

puntpunt

lista.elementos
lista.elementos

0
4

1
13

2
3

4

3
5
47 53 19

6
7

7
48

8

...

98

99

lista.cont
lista.cont

8

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 957

}

}

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

z
e
ñ
á
Y
 
z
e
d
n
á
n
r
e
H
 
s
i
u
L

...
for (int i = 0; i < lista.cont; i++) {

cout << *punt << endl;
punt++;

4
4
13
13

ii

2

puntpunt

lista.elementos
lista.elementos

0
4

1
13

2
3

4

3
5
47 53 19

6
7

7
48

8

...

98

99

lista.cont
lista.cont

8

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 958

...
for (int i = 0; i < lista.cont; i++) {

cout << *punt << endl;
punt++;

4
4
13
13
3
3

ii

3

puntpunt

lista.elementos
lista.elementos

0
4

1
13

2
3

lista.cont
lista.cont

8

8

...

98

99

6
7

7
48

4

3
5
47 53 19

. . .
. . .

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Página 959

}

}

z
e
ñ
á
Y
 
z
e
d
n
á
n
  • Links de descarga
http://lwp-l.com/pdf18804

Comentarios de: 9A Punteros y memoria dinámica - Fundamentos de la programación (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad