Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INFORMÁTICA
SIS – 2210 METODOLOGÍA DE LA PROGRAMACIÓN II
GUIA DE LABORATORIO # 9
PUNTEROS
LOGROS A ALCANZAR
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:
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.
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.
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
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.
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
char *ptr;
*ptr = ‘a’; // ERROR
int n;
int *ptr = &n;
ptr = 9; // ERROR
Intentar asignarle un valor al dato apuntado por un puntero cuando éste es NULL
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
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.
CUESTIONARIO
Página 4