Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Punteros II
pag.
Punteros II
Entender que estos punteros a vacı́o son genéricos en el sentido que pueden
recibir implı́citamente el valor de cualquier puntero.
sabe “el tamanõ (cantidad de bytes) de los pasos cuando nos movemos a través
de ptr.” La razón de la existencia de estos punteros es para guardar en ellos
direcciones de memoria y manipular esta información de manera independiente
a los tipos de estos lugares, i.e., si son direcciones de lugares que guardan valo-
res enteros o flotanes o caracteres, etc. Veamos su uso a través de las siguientes
sentencias.
La sentencia de la lı́nea 3 presenta un error del tipo: invalid conversion from ’void*’ to ’int*’.
En efecto, en dicha lı́nea se produce un error de sintaxis al intenter asignar el
valor de un puntero a vacı́o a un puntero a entero. No obstante, aunque no es
lo recomendado, es posible realizar esta tarea mediante una conversión de tipos
explı́cita:
p_int = static_cast<int*>(p_void);
Esto guarda coherencia con la idea literal del puntero a vacı́o, pues este se
define como aquel tipo de puntero que no apunta a un tipo especı́fico de dato:
es un puntero que puede guardar cualquier dirección de memoria en general.
Ejemplo 5.1. En las lı́neas 8-10 se llama a la función mostrar, la cual recibe
punteros del tipo entero y flotante.
Página 2 de 9
1 #include <iostream>
2 using namespace std;
3 void mostrar(void* p, void* q);
4
5 int main() {
6 int nota = 20;
7 double promedio = 20;
8 mostrar(¬a,&promedio);
9 mostrar(¬a,¬a);
10 mostrar(&promedio,¬a);
11 }
12
Listado 1: Programa que muestra el uso del puntero vacı́o como parámetro.
Página 3 de 9
Expresión Descripción
p[x] operador de suscripción; equivalente a *(p+x)
v++ operador post-incremento; el valor de v++ es el valor de v
antes del incremento.
v-- operador post-disminución; el valor de v-- es el valor de v
antes de la disminución.
static_cast<T>(x) operador de conversión de C++; el valor de
static_cast<T>(x) es x y el tipo es T.
sizeof(T) el tamaño de T en bytes.
sizeof(x) el tamaño en bytes de una expresión del tipo de x.
++v operador pre-incremento; el valor de ++v es el valor de v
después del incremento.
--v operador pre-disminución; el valor de --v es el valor de v
después de la disminución.
&v operador dirección; el valor de &v es la dirección de memoria
del sistema cuyo nombre (identificador) es v.
*p operador indirección; el valor de *p es el valor del sistema
apuntado por p.
(T)x operador de conversión de tipos de C; el valor de (T)x es x
y el tipo es T.
Cuadro 5.1: Orden de precendencia –de arriba hacia abajo– de algunos opera-
dores relacionados al manejo de punteros.
Página 4 de 9
8 int main() {
9 arreglo cc112[ESTUDIANTES] = {{15,16,17},{18,19,20}};
10 //arreglo* p_arreglo = cc112;
11 for (int j = 0; j < ESTUDIANTES; ++j) {
12 cout << "Estudiante " << j << ":";
13 for (int k = 0; k < LABORATORIOS; ++k) {
14 cout << setw(4) << cc112[j][k];
15 }
16 cout << endl;
17 }
18 }
Página 5 de 9
9 int main() {
10 arreglo notas[FILAS] = {{15,16,17},{18,19,20}};
11 mostrar(notas);
12 }
13
5.3. Ejercicios
5.3.1. Nivel bajo de dificultad
Ejercicio 5.1. Indique lo que se muestra en la pantalla al ejecutar el siguiente
programa y explique por qué.
Página 6 de 9
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int *p, *q, nota = 20;
6 p = ¬a;
7 q = ¬a;
8 cout << "*p\t=\t" << *q << endl;
9 cout << "*q\t=\t" << *q << endl;
10 return 0;
11 }
Ejercicio 5.2. Indique lo que se muestra en la pantalla al ejecutar el siguiente
programa y explique por qué.
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int **p, *p_int, nota = 20;
6 p = &p_int;
7 p_int = ¬a;
8 cout << "**p\t\t=\t" << **p << endl;
9 cout << "p[0][0]\t=\t" << p[0][0] << endl;
10 return 0;
11 }
Ejercicio 5.3. Indique lo que se muestra en la pantalla al ejecutar el siguiente
programa y explique por qué.
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int***r, **q, *p, j = 8;
6 p = &j;
7 q = &p;
8 r = &q;
9 cout << *p << "\t" << **q << "\t" << ***r << endl;
10 return 0;
11 }
Ejercicio 5.4. Indique lo que se muestra en la pantalla al ejecutar el siguiente
programa y explique por qué.
1 #include <iostream>
2 #include <iomanip>
Página 7 de 9
10 int main() {
11 arr notas[FILAS] = {{15,16,17},{18,19,20}};
12 cout << "notas\t\t\t=\t" << notas << endl;
13 cout << "notas + 1\t\t=\t" << notas + 1 << endl;
14 cout << "notas[0]\t\t=\t" << notas[0] << endl;
15 cout << "notas[0] + 1\t=\t" << notas[0] + 1 << endl;
16 }
Ejercicio 5.5. Imprima los elementos de la matriz del ejemplo anterior sin usar
el operador de suscripción: [].
Ejercicio 5.8. Genere el mismo vector primos y defina las mismas funciones
Página 8 de 9
Página 9 de 9