Punteros
Ing. Margoth Guaraca
DIRECCIONES Y REFERENCIAS
• Al valor de una variable se accede por medio de su
nombre.
cout << n;
• A la dirección de una variable se accede por medio
del operador de dirección &.
cout << &n;
Ejemplo: Main()
{
int n = 75;
cout << “n = “ << n << endl;
cout << “n = ” << &n << endl;
// referencias (alias de otra variable)
int& r = n;
// idet. n y r son nombres diferentes para la misma variable.
cout << “n = “ << n << endl;
cout << “r = ” << r << endl;
//las var. n y r tienen la misma dirección de memoria.
cout << “&n = “ << &n << endl;
cout << “&r = ” << &r << endl;
}
n = 75
&n = 0x4fffffd34
Definición
• Un puntero es una variable que contiene una dirección de
memoria. Normalmente, esa dirección es la posición de otra
variable de memoria.
Dirección
de memoria
Variable de
memoria
EF00
EF02
FEE0
20
EF00
variable (valor)
Variable puntero (dirección)
Diferencia con variables.
Variable int => 2 bytes
• Un puntero es una variable
como cualquier otra.
• Una variable puntero contiene
una dirección que apunta a
otra dirección de memoria.
• En esa dirección se almacenan
los datos a los que apunta el
puntero.
• Un puntero apunta a una
variable de meoria.
Declaración de la variable puntero
• La forma general para declarar una variable puntero es:
<tipo de dato apuntado> *<identificador de puntero>
tipo *nombre;
Donde: tipo, es cualquier tipo de dato válido de C++.
nombre, es el nombre de la variable puntero.
El tipo base del puntero define el tipo de variables a las que
puede apuntar.
int *ptr1; //puntero a un tipo de dato entero (int)
long *ptr2; //puntero a un tipo de dato entero largo (long int)
char *ptr3; //puntero a un tipo de dato char
Inicialización de Punteros
• Al igual que cualquier otra variable en C++ cuando se declaran
los punteros, es preciso inicializarlos antes de utilizarlos.
• Asignar memoria (estáticamente)
int i; //declara una variable i
int *p; //declara un puntero a un entero p
p = &i; //asigna la dirección de i a p
int edad = 50; //declara una variable edad con un valor 50
int *p_edad = &edad; //declara un puntero de enteros inicializándolo con
la dirección de edad
char *p;
char alfa = ‘A’;
p = &alfa
• Asignar asignar un valor a la dirección de memoria
*p = 50;
Asignación de Punteros
• Se puede asignar una dirección o un puntero
solamente a una variable puntero.
Indirección de Punteros
• El uso del puntero para obtener el valor al que
apunta, es decir, su dato apuntado se
denomina indireccionar el puntero.
Cout << edad; // imprime el valor de edad
Cout << *p_edad; // indirecciona p_edad
Operadores De Dirección
Operador Nombre Descripción
*
Operador
indirección
Declara una variable como
puntero.
Obtiene el contenido de una
variable puntero.
&
Operador
dirección
Obtiene la dirección de una
variable
EJEMPLO
• Punteros y verificación de tipos:
• Punteros NULL (no apunta a ninguna parte)y VOID
(direcciona datos d un tipo no especificado)
• Puntero a puntero
• PUNTEROS Y ARRAYS
• (direccionar arrays como si fueran punteros y
punteros como si fueran arrays)

Punteros yo

  • 1.
  • 2.
    DIRECCIONES Y REFERENCIAS •Al valor de una variable se accede por medio de su nombre. cout << n; • A la dirección de una variable se accede por medio del operador de dirección &. cout << &n; Ejemplo: Main() { int n = 75; cout << “n = “ << n << endl; cout << “n = ” << &n << endl; // referencias (alias de otra variable) int& r = n; // idet. n y r son nombres diferentes para la misma variable. cout << “n = “ << n << endl; cout << “r = ” << r << endl; //las var. n y r tienen la misma dirección de memoria. cout << “&n = “ << &n << endl; cout << “&r = ” << &r << endl; } n = 75 &n = 0x4fffffd34
  • 3.
    Definición • Un punteroes una variable que contiene una dirección de memoria. Normalmente, esa dirección es la posición de otra variable de memoria. Dirección de memoria Variable de memoria EF00 EF02 FEE0 20 EF00 variable (valor) Variable puntero (dirección) Diferencia con variables. Variable int => 2 bytes • Un puntero es una variable como cualquier otra. • Una variable puntero contiene una dirección que apunta a otra dirección de memoria. • En esa dirección se almacenan los datos a los que apunta el puntero. • Un puntero apunta a una variable de meoria.
  • 4.
    Declaración de lavariable puntero • La forma general para declarar una variable puntero es: <tipo de dato apuntado> *<identificador de puntero> tipo *nombre; Donde: tipo, es cualquier tipo de dato válido de C++. nombre, es el nombre de la variable puntero. El tipo base del puntero define el tipo de variables a las que puede apuntar. int *ptr1; //puntero a un tipo de dato entero (int) long *ptr2; //puntero a un tipo de dato entero largo (long int) char *ptr3; //puntero a un tipo de dato char
  • 5.
    Inicialización de Punteros •Al igual que cualquier otra variable en C++ cuando se declaran los punteros, es preciso inicializarlos antes de utilizarlos. • Asignar memoria (estáticamente) int i; //declara una variable i int *p; //declara un puntero a un entero p p = &i; //asigna la dirección de i a p int edad = 50; //declara una variable edad con un valor 50 int *p_edad = &edad; //declara un puntero de enteros inicializándolo con la dirección de edad char *p; char alfa = ‘A’; p = &alfa • Asignar asignar un valor a la dirección de memoria *p = 50;
  • 6.
    Asignación de Punteros •Se puede asignar una dirección o un puntero solamente a una variable puntero.
  • 7.
    Indirección de Punteros •El uso del puntero para obtener el valor al que apunta, es decir, su dato apuntado se denomina indireccionar el puntero. Cout << edad; // imprime el valor de edad Cout << *p_edad; // indirecciona p_edad
  • 8.
    Operadores De Dirección OperadorNombre Descripción * Operador indirección Declara una variable como puntero. Obtiene el contenido de una variable puntero. & Operador dirección Obtiene la dirección de una variable
  • 9.
    EJEMPLO • Punteros yverificación de tipos: • Punteros NULL (no apunta a ninguna parte)y VOID (direcciona datos d un tipo no especificado) • Puntero a puntero • PUNTEROS Y ARRAYS • (direccionar arrays como si fueran punteros y punteros como si fueran arrays)