QT Capitulo 03

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

Programación C++ con las Librerías QT sobre entorno linux

CAPITULO III

I. CONTENIDO

CAPÍTULO No. 3: Estructura de control de flujos Duración: 4 Hrs

Temas Habilidades
Al finalizar el capítulo, el alumno podrá:
• Punteros • Aplicación de punteros
• Estructura de datos • Definir estructuras de datos

II. PUNTEROS

Los punteros son variables que se utilizan para almacenar direcciones de memoria que
fueron asignadas a variables en las que se almacenan datos de distinto tipo.

Cada uno de los espacios de memoria cuenta con una dirección para identificarlo, esta
dirección es por lo general un número en representación hexadecimal.

Distribución de la memoria

Para entender este concepto de punteros, tenemos a la memoria divida en partes


pequeñas, a las cuales se les asigna una dirección (un número hexadecimal), dicha
numeración es secuencia.

Al declarar una variable, el sistema operativo le asigna un espacio de memoria, el


tamaño del espacio va a depender del tipo de dato de la variables (ya vimos en el
capítulo anterior que cada tipo de dato ocupa determinado número de bytes). Para
nuestro ejemplo, vamos a declarar 4 variables, las cuales tendrán diferente tamaño
de memoria asignado:

Capitulo III Pág. 1


Programación C++ con las Librerías QT sobre entorno linux
char VAR_1;
float VAR_2;
bool VAR_3;
int VAR_4;

Asignación de memoria a las Variables

En el ejemplo tenemos 4 variables, a las cuales se les han asignado las siguientes
direcciones de memoria:

✓ Dirección 1 Para la variable VAR_1


✓ Dirección 2 Para la variable VAR_2
✓ Dirección 6 Para la variable VAR_3
✓ Dirección 7 Para la variable VAR_4

Como se observa el tamaño de memoria asignado depende del tipo de dato declarado.
Para poder manipular los datos almacenados, tenemos que hacer referencia a la
variable correspondiente: VAR_1, VAR_2, etc.

Si bien es cierto que los punteros hacen referencia direcciones de memoria, para el
sistema operativo, un puntero y una variables tienen el mismo concepto: es un espacio

Capitulo III Pág. 2


Programación C++ con las Librerías QT sobre entorno linux
de memoria que almacena un dato, por lo tanto, un puntero no es mas ni menos que
otra variable mas (para el sistema operativo).

Una de las diferencias entre las variables y punteros, es que estos últimos siempre
tendrán asignado un mismo tamaño de espacio de memoria (este tamaño dependerá
de la arquitectura del computador), sin importar el tipo de dato de la variable a la cual
hace referencia; esto se explica porque los puntero solo almacenan direcciones de
memoria y toda dirección de memoria ocupa un espacio fijo de almacenamiento:

char *PUN_1 = &VAR_1;


float *PUN_2 = &VAR_2;
bool *PUN_3 = &VAR_3;
int *PUN_4 = &VAR_4;

¿Si un puntero tiene tamaño constante, porqué se debe de incluir el tipo de dato de la
variablel a la cual hace referencia?. El tipo de dato se debe incluir porque al momento
de hacer la des-referencia (proceso de leer el contenido de la memoria referenciada)
se debe sabe hasta dónde debe leer (el tamaño de la variable); el puntero solo tiene
la dirección de memoria de inicio pero no conoce la dirección de memoria final, por sí
solo no sabe cuál es el tamaño de la variable referenciada; necesita la dirección final
de esa variable, esa dirección final solo la puede obtener del tipo de dato de la variable
referenciada.

Si cada celda de división de la memoria tiene capacidad para almacenar un byte,


podemos decir que el tamaño de las siguientes variables son:

✓ VAR_1 tiene 1 byte


✓ VAR_2 tiene 4 bytes
✓ VAR_3 tiene 1 byte

Capitulo III Pág. 3


Programación C++ con las Librerías QT sobre entorno linux
✓ VAR_4 tiene 4 bytes
✓ PUN_1 tiene 2 bytes
✓ PUN_2 tiene 2 bytes
✓ PUN_3 tiene 2 bytes
✓ PUN_4 tiene 2 bytes

Sobre las variables ya sabemos cuál es su contendio. Los punteros siempre almancen
el valor de una dirección de memoria; la variable puntero PUNT_1 que hace referencia
a la variable VAR_1 tiene asignado el valor de 1, esto es así, porque la dirección de
memoria de la variable VAR_1 es 1; de la misma forma sucederá con las siguientes 2
variables de tipo puntero.

III. VECTORES - MATRICES

➢ VECTORES, un vector es una estructura de datos de una sola dimensión que puede
almacenar una cantidad de variables del mismo tipo, es decir, podemos tener un vector
que almacenará uno, dos, tres, cuatro, etc… valores del mismo tipo.

Cada elemento del vector tendrá una numeración o índice, el índice inicial tendrá el
valor de cero, el segundo índice el valor de uno, el tercer índice el valor de dos y así
sucesivamente hasta el tamaño que se haya definido para el vector.

Un vector también es llamado arreglo de datos. La forma cómo se asigna la memoria


necesaria, dependerá del tipo de dato que almacenará y la cantidad de índices que se
definan; la dirección de memoria de cada índice será consecutiva, por lo tanto, si
conocemos la dirección de memoria del primer elemento, podemos acceder a todos
los valores del vector (aquí está una utilidad para los punteros).

int nota[2];

En el ejemplo anterior, de no usar arreglos, necesitaríamos declarar tres variables


enteras:
int nota1;
int nota2;
int nota3;

Capitulo III Pág. 4


Programación C++ con las Librerías QT sobre entorno linux

Vector de 3 posiciones Declaración de 3 variables

Como se observa en la asignación del vector, el sistema operativo asignó direcciones


de memoria consecutivos a cada elemento del vector, mientras que al declarar tres
variables independientes, el sistema operativo no garantiza que las direcciones de
memoria vayan a ser consecutivas; entonces, haciendo uso de punteros y conociendo
la dirección de memoria del primer elemento, podemos recorrer los valores del resto
con el mismo puntero, si quisiéramos realizar lo mismo con las 3 variables,
necesitaríasmos declarar tres punteros, uno para cada variable.

Para la asignación de valores a cada elemento del vector, se puede realizar durante la
declaración de esta o posteriormente haciendo uso de sus índices.

int nota[2] = {20,18,16};


int edad[5];
edad[0] = 26;
edad[1] = 12;
edad[2] = 38; …

Para crear punteros que hagan referencia a vectores, solo se deberá asignar el nombre
del vector al puntero, ya que el nombre del vector siempre hace referencia al primer
elemento de este.
int *pun_vector_nota = nota;

Capitulo III Pág. 5


Programación C++ con las Librerías QT sobre entorno linux
int *pun_vector_edad;
pun_vector_edad = edad;

Note que para asignar el vector al puntero ya no es necesario anteponer el operador


“&” al nombre del vector, esto no es necesario porque el nombre del vector en sí mismo
es la dirección de memoria del primer elemento ([0]).

Ya mencionamos que un puntero es una referencia a una dirección de memoria, y la


dirección de memoria es un valor numérico expresado en hexadecimal; por lo tanto,
al ser de tipo numérico se puede realizar operaciones matemáticas con punteros, a
estas operaciones se les llama Aritmética de punteros, las únicas operaciones que
están permitidas serán la adición y sustracción de unidades.

A través de la aritmética de punteros podemos recorrer cada elemento de un vector


sin necesidad de declarar un puntero por cada índice del vector.

int nota[2] = {20,18,16};


int *pun_vector_nota = nota;

cout<<”Valor del primer elemento: ”<< *pun_vector_nota<<endl;


//imprimirá 20
pun_vector_nota = pun_vector_nota + 1;
cout<<”Valor del segundo elemento: ”<< *pun_vector_nota<<endl;
//imprimirá 18
++pun_vector_nota;
cout<<”Valor del tercer elemento: ”<< *pun_vector_nota<<endl;
//imprimirá 18

Pasar vectores como parámetros a funciones se hace por referencia, es decir, se pasa
la dirección de memoria del primer elemento; ya que los vectores tienen el mismo
comportamiento de un puntero, toda asignación a auna función será por referencia;
dentro de la función se deberá controlar la actualización de los datos del vector, ya
que al pasar por referencia, cualquier actualización de la misma, se verá reflejado en
la función principal.

void función_vector(int nota[]){


nota[1] = 12;

Capitulo III Pág. 6


Programación C++ con las Librerías QT sobre entorno linux
cout<<”El valor del segundo elemento es: ”<<nota[1];
}

En la función main se invoca a la función de la siguiente forma:

Int nota[3] ={0};


Int *p = nota;

Función_vector(nota);

➢ MATRICES, una matriz es una estructura de datos formada por mas de una dimensión
(vector), de la misma forma que un vector contiene un conjunto de variables, una
matriz contiene un conjunto de vectores; por lo tanto todos tendrán un mismo tipo de
dato y nombre común. Para hacer referencia a sus elementos se usará un índice
combinado que está formado por la cantidad de vectores que conforman la matriz.

Puede haber, por ejemplo, matrices de elementos de tipo de dato float o matrices de
tipo de dato char.
int nota[4] [10];

El nombre de una matriz puede usarse como apuntador a su elemento inicial.


Dependiendo de las dimensiones definidas en la matriz, para acceder a cada elemento
se tendrá que colocar el índice correspondiente de cada vector:

nota[0][0] = 16;
nota[0][1] = 18;
nota[0][2] = 14;

Capitulo III Pág. 7


Programación C++ con las Librerías QT sobre entorno linux
De forma análoga al uso de punteros con vectores, con las matrices sucede lo mismo;
podemos hacer referencia de un puntero a una matriz, pero en esta oportunidad
debemos de indicar a cuál de los vectores contenidos en la matriz se hará referencia,
por defecto debería ser al primer vector.

int nota[4] [10];


int *pun_matriz_nota = nota[0];

IV. LABORATORIO N° 1

Escriba un programa en C++ para declarar variables comunes y variables punteros, luego
imprima en pantalla el contenido de cada variable;

V. LABORATORIO N° 2

Crear un programa que envie un parámetro por referencia a una función.

VI. LABORATORIO N° 3

Crear un programa para el registro de notas en un vector;

VII. LABORATORIO N° 4

Crear un programa para registrar datos en una matriz bidemensional.

Capitulo III Pág. 8

También podría gustarte