Sunteți pe pagina 1din 14

PUNTEROS

Estructura de datos dinámicas y


punteros

• Hasta este momento hemos venido trabajando con variables,


dimensionadas o no, que son direcciones simbólicas de posiciones de
memoria, de forma que existe una relación bien determinada entre
nombres de variables y posiciones de memoria durante toda la
ejecución del programa.

• Aunque el contenido de una posición de memoria asociada con una


variable puede cambiar durante la ejecución, es decir el valor asignado
a la variable puede variar, las variables por si mismas no pueden crecer
ni disminuir, durante la ejecución.

• Sin embargo, en muchas ocasiones es conveniente poder disponer de


un método por el cual, podamos adquirir posiciones de memoria
adicionales, a medida que las vayamos necesitando durante la
ejecución y al contrario liberarlas cuando no se necesiten

Punteros1.cpp
Puntero

Puntero Dato
Variables y Punteros
Variable Puntero
• Nombre • un puntero es una variable
como cualquier otra
• Tipo • una variable puntero contiene
• Dirección en Memoria una dirección que apunta a
otra posición en memoria
• en esa posición se almacenan
los datos a los que apunta el
puntero
• un puntero apunta a una
variable de memoria

Al valor de una variable se accede por medio de su nombre.


A la dirección de la variable se accede por medio del operador de dirección &. ||| Punteros2.cpp
Declaración de punteros

• La declaración de una variable puntero debe


indicar al compilador el tipo de dato al que
apunta el puntero; para ello se hace preceder
a su nombre con un asterisco (*), mediante el
siguiente formato:
• <Tipo de Dato> <Identificador de Puntero>
• Ejemplo: int *p;
Inicialización de punteros
• AI igual que otras variables, C++ no inicializa
los punteros cuando se declaran y es preciso
inicializarlos antes de su uso.
• La inicialización de un puntero proporciona a
ese puntero la dirección del dato
correspondiente.
• Para asignar una dirección de memoria a un
puntero se utiliza el operador de referencia &;
Ejemplo: &valor
• Asignar memoria (estáticamente) definiendo
una variable y a continuación hacer que el
puntero apunte al valor de la variable.
int i; // define una variable i
int *p; // define un puntero a un entero p
p = &i; // asigna la dirección de i a p

• Asignar un valor a la dirección de memoria.


*p = 50;
• Otros ejemplos de inicialización estáticos:
1.
int edad = 50; //define una variable edad de valor 50
int *p_edad = &edad; //define un puntero de enteros inicializándolo con
la dirección de edad
2.
char *p;
char alfa = 'A';
p = &alfa;

3.
char cd[] = "Compacto";
char *c;
c = cd; //c tiene la dirección de Id cadena cd
• Es un error asignar un valor, a un contenido de
una variable puntero si previamente no se ha
inicializado con la dirección de una variable, o
bien se le ha asignado dinámicamente
memoria. Por ejemplo:

float* px; / * puntero a float * /

*px = 23.5; / * error, px no contiene dirección */


Indirección de punteros

• Después de definir una variable puntero, el


siguiente paso es inicializar el puntero y
utilizarlo para direccionar algún dato
específico en memoria. El uso de un puntero
para obtener el valor al que apunta, es decir,
su dato apuntado se denomina indireccionar
el puntero («desreferencia- el puntero»); para
ello, se utiliza el operador de indirección * .
int edad;
int* pedad;
pedad= &edad;
*pedad= 50;

• printf ("%d",edad);// imprime el valor de edad


• printf ("%d",pedad) ; //indireccion a p-edad

Punteros3.cpp
Memoria
Direcciones

Edad en
320.000 50

pedad apunta a
edad

pedad
en 320.000
350.420
Punteros y tipos

1. float *fp;
char c;
fp = &c; // no es válido
2. char *p = NULL;
3. valor_e = 95;
*pt.rl= 105; // Asigna 105 a valor_e
**ptr5 = 99; // Asigna 99 a valor_e
Ejercicios

• Encuentra los errores


en la siguiente
declaración de
punteros:
int x , *p, y;
char *b= "Cadena larga" ;
char *c= 'C';
int *tr=50;
float x;
void *r = &x;

S-ar putea să vă placă și