Está en la página 1de 4

U.T.O. – F.N.I. ING. DE SISTEMAS – ING.

INFORMÁTICA
SIS – 2210 METODOLOGÍA DE LA PROGRAMACIÓN II

GUIA DE LABORATORIO # 9
PUNTEROS

LOGROS A ALCANZAR

 Entender el concepto de puntero en programación


 Conocer la sintaxis del uso de los punteros
 Comprender lo que es un puntero y como usarlo con seguridad
 Pasando valores por valor y por referencia

FUNDAMENTO TEÓRICO

DEFINICIÓN
Los punteros son variables cuyos valores son direcciones de memoria. Por lo general, una variable contiene un valor
específico, un entero, un flotante, un carácter, etc. En cambio, una variable puntero contiene la dirección en memoria
de una variable que contiene un valor específico. De esta manera, mediante el nombre o el identificador de una
variable, hacemos referencia directa a un valor. En cambio, mediante el nombre o identificador de un puntero,
hacemos referencia indirecta a un valor. Al proceso de referenciar a un valor a través de un puntero, se le llama
indirección.

DECLARACIÓN
Ya se dijo que un puntero es una variable que guarda la dirección de memoria de otra variable. Un puntero se declara
igual que cualquier otra variable, pero anteponiendo un * (asterisco) antes del nombre de la variable.

Su sintaxis sería:

tipo *NombrePuntero = NULL; //Se iguala a NULL para saber que no


tiene asignada ninguna dirección.

Donde tipo es el tipo de dato al que referenciará este puntero, es decir, que, si se necesita guardar la dirección de
memoria de un dato int, se necesita un puntero de tipo int.

NOTA: Existe una dirección especial que se representa por medio de la constante NULL (definida en <stdlib.h>) y se
emplea cuando queremos indicar que un puntero no apunta a ninguna dirección.

OPERADORES
Ya anteriormente te poníamos algunos ejemplos de cómo asignar la dirección de memoria a un puntero y de cómo
acceder al valor de este.

Operador de Dirección (&): Este nos permite acceder a la dirección de memoria de una variable.

&<id> //devuelve la dirección de memoria donde comienza la variable <id>

El operador & se utiliza para asignar valores a datos de tipo puntero:

int i;
int *ptr;
ptr = &i;

Operador de Indirección (*): Además de que nos permite declarar un tipo de dato puntero, también nos permite ver el
VALOR que está en la dirección asignada.

*<ptr> //devuelve el contenido del objeto referenciado por el puntero <ptr>

El operador * se usa para acceder a los objetos a los que apunta un puntero:

char c;

Página 1
U.T.O. – F.N.I. ING. DE SISTEMAS – ING. INFORMÁTICA
SIS – 2210 METODOLOGÍA DE LA PROGRAMACIÓN II

char *ptr;
ptr = &c;
*ptr = ‘A’; // Equivale a escribir: c = ‘A’;

Operador de Asignación =: A un puntero se le puede asignar una dirección de memoria concreta, la dirección de una

Una dirección de Otro puntero del mismo tipo:


La dirección de una variable del tipo
memoria concreta:
al que apunta el puntero: char c;
int *ptr; char *ptr1;
ptr = 0x1F3CE00A; char c; char *ptr2;
ptr = NULL; char *ptr; ptr1 = &c;
ptr = &c; ptr2 = ptr1;

variable o el contenido de otro puntero.

Como todas las variables, los punteros también contienen “basura” cuando se declaran, por lo que es una buena
costumbre inicializarlos con NULL.

Incrementos (++) y Decrementos (--): Te darás cuenta que puedes usar un puntero como si de un array se tratase, es
por esto que permite estos operadores.

El espacio de memoria reservado para almacenar un puntero es el mismo


independientemente del tipo de dato al que apunte: el espacio que ocupa una
dirección de memoria.

char c = ’a’;
char *ptrc;
int *ptri;

EJE
MP
int y = 5; LO
int z = 3; mptr = nptr;
int *nptr;
int *mptr; ER
RO
RES
nptr = &y; mptr = *z; CO
MU
NES
Asig
nar
z = *nptr; *mptr = pun
*nptr; tero
s de
dist
into
*nptr = 7; y = tipo
(*nptr)+1;
int
a = 10;
int *ptri = NULL;
double x = 5.0;
double *ptrf = NULL;
...
ptri = &a;
ptrf = &x;
ptrf = ptri; // ERROR

Página 2
U.T.O. – F.N.I. ING. DE SISTEMAS – ING. INFORMÁTICA
SIS – 2210 METODOLOGÍA DE LA PROGRAMACIÓN II

Utilizar punteros no inicializados

char *ptr;
*ptr = ‘a’; // ERROR

Asignar valores a un puntero y no a la variable a la que apunta

int n;
int *ptr = &n;
ptr = 9; // ERROR

Intentar asignarle un valor al dato apuntado por un puntero cuando éste es NULL

int *ptr = NULL;


*ptr = 9; // ERROR

OPERACIONES CON PUNTEROS


La aritmética de punteros es limitada, pero en muchos aspectos muy interesante; y aunque no son muchas las
operaciones que se pueden hacer con los punteros, cada una tiene sus peculiaridades.

Correspondencia entre punteros y vectores: Cuando declaramos un vector:


<tipo> <identificador>[tamaño]

Reservamos memoria para almacenar <tamaño> elementos de tipo <tipo>.


1. Creamos un puntero <identificador> que apunta a la primera posición de la memoria reservada para
almacenar los componentes del vector.

Por tanto, el identificador del vector es un puntero.

int v[3];
int *ptr;
...
ptr = v; // Equivale a ptr = &v[0]
v[0] = 6; // ≡ *v = 6; ≡ *(&v[0]) = 6;

Operaciones Aritméticas: Un puntero nos permite sumar o restar números enteros, pero su funcionamiento ahora es
de posiciones, es decir que nos permitirá movernos a la siguiente dirección de memoria.

A un puntero no se le puede realizar multiplicaciones, divisiones, sumas o restas con otro puntero o con un valor de
tipo coma flotante (float, double...). Esto es porque un puntero no es un valor, sólo es una dirección.

En un puntero se pueden realizar varias operaciones de tipo enteras, pero en dependencia de cómo se usen, sus
resultados pueden ser muy diferentes, a continuación, les muestro algunas de estas operaciones:

Página 3
U.T.O. – F.N.I. ING. DE SISTEMAS – ING. INFORMÁTICA
SIS – 2210 METODOLOGÍA DE LA PROGRAMACIÓN II

ACTIVIDAD DE CLASE

1. Ejecute y analice el siguiente programa:

2. Escriba un programa que contenga dos arrays con datos enteros y utilizando punteros genere un tercer
arrays con la suma de los dos arrays creados con anterioridad.

PROBLEMAS PROPUESTOS

Desarrolle con arreglos y funciones un programa que lea para “N” alumnos los datos siguientes: carnet, edad y nota.

A partir de estos datos realizar un menú con las siguientes acciones:

a. Solicitar los datos al usuario.


b. Calcular e imprimir la nota promedio.
c. Calcular e imprimir edad promedio de los alumnos que obtuvieron una nota igual o mayor a 60.
d. Imprimir Listado que incluya Carnet, Edad y nota correspondiente de todos los alumnos en forma
ascendente (con respecto a la nota).

CUESTIONARIO

1. ¿Qué almacena un puntero?


2. ¿Cómo se declara un puntero a floatante?
3. ¿Cómo se asigna a un puntero p la dirección de una variable x?
4. Si p contiene la dirección de x ¿Cómo le asigno el valor 0 a x empleando el puntero?
5. Si p es un puntero, ¿qué representa el nombre de un vector cuando escribimos p=vector?
6. Si una función tiene el prototipo void funcion(int * vector), ¿cómo podría ser la llamada a la función?

Página 4

También podría gustarte