Documentos de Académico
Documentos de Profesional
Documentos de Cultura
III. Apuntadores
Resumen
Apuntadores
Objetivos
• Comprender los apuntadores y los operadores para
apuntadores.
• Utilizar los apuntadores para pasar por referencia
argumentos a una función.
• Comprender las relaciones entre apuntadores y arreglos
• Utilizar apuntadores a estructuras
Conceptos generales
Reglas básicas:
1. un apuntador es una variable como cualquier
otra;
2. una variable apuntador contiene una dirección
que apunta a otra posición en memoria;
3. en esa posición (dirección) se almacenan los
datos a los que apunta el apuntador
Conceptos generales
Cada variable que se declara en C tiene una
dirección asociada a ella.
int x=10;
Variable x
Valor 10
Dirección 008C70C 008C710 0x6ffe0c 008C718 008C71C ...
Conceptos generales
Cada variable que se declara en C tiene una
dirección asociada a ella.
int x=10;
float y=5;
Variable y x
Valor 5 10
Dirección 008C70C 008C710 0x6ffe0c 008C718 008C71C ...
Dirección asociada a una Ej 1
variable &
Obtener el valor y la dirección de una variable
#include<iostream>
using namespace std;
main()
{
int x=10;
cout<<"Valor de "<<x<<endl;
cout<<"Direccion de x "<<&x<<endl;
}
1. Definición o declaración de un
apuntador
Operador *
Cada variable que se declara en C tiene una
dirección asociada a ella.
Dirección a un apuntador
main()
{
int x=10, *ptrx;
cout<<"Valor de x -----------"<<x<<endl;;
cout<<"Direccion de x--------"<<&x<<endl;
cout<<"Valor de ptrx --------"<<ptrx<<endl;
cout<<"Direccion de &ptrx ---"<<&ptrx<<endl;
}
Operador de dirección & Ej 2
Resultados
Basura
9
2. Asignación de una dirección a
un apuntador
Cada variable que se declara en C tiene una
dirección asociada a ella.
int x=10, *ptrx;
float y=5; ptrx apunta a x
ptrx=&x;
Variable y x ptrx
Valor 5 10 0x6ffe0c
Dirección 008C70C 008C710 0x6ffe0c 008C718 0x6ffe00 ...
Como los apuntadores son variables también
tienen una dirección
Asignación de una dirección a un Ej 3
apuntador
#include<iostream>
Operador &
using namespace std;
main()
{
int x=10, *ptrx;
cout<<"Valor de x -----------"<<x<<endl;;
cout<<"Direccion de x--------"<<&x<<endl;
cout<<"Valor de ptrx --------"<<ptrx<<endl;
cout<<"Direccion de &ptrx ---"<<&ptrx<<endl<<endl;
ptrx=&x;
cout<<"Valor de ptrx --------"<<ptrx<<endl;
cout<<"Direccion de &ptrx ---"<<&ptrx<<endl;
} 11
Asignación de una dirección a un Ej 3
apuntador
Basura
Dirección de x
asignada a ptrx
12
Apuntadores
Operador sizeof(tipo):
Ejemplo:
struct persona{
char nombre[30 ] ;
int edad;
int altura;
int peso;
};
struct persona empleado = { “Amigo, Pepe” , 47, 182, 85};
struct persona *p; /* se crea un apuntador de estructura */
p = &empleado;
Apuntadores a estructuras
• Definición
– alumno *pfc;
pfc es un apuntador a un dato de tipo alumno
• Acceso a los miembros
– (*pfc).Re (No olvidar los paréntesis)
• Notación estándar:
– (*pfc).Re pfc->Re
Ejemplo
#include <stdio.h>
struct tpersona{
char nombre[30 ]; Se declara el tipo de estructura tpersona, que se asocia con el tipo
int edad; persona para facilidad de escritura. Un arreglo de esta estructura se
int altura; inicializa con campos al azar y se muestran por pantalla.
int peso;
};
typedef struct tpersona persona;
void MostrarPersona( persona * ptr );
main( ) void MostrarPersona( persona * ptr )
{ {
int i; printf("\nNombre: %s", ptr->nombre);
persona empleados[ ] = { printf("\tEdad: %d ", ptr->edad);
{ "Mortimer, Pepe", 47, 182, 85}, printf("\tAltura: %d ", ptr->altura);
"Garcia, Luis", 39, 170, 75, printf("\tPeso: %d\n", ptr->peso);
"Jiménez, Tomás", 18, 175, 80 }; }
persona *p;
p = empleados;
for (i = 0; i < 3; i++, p++)
MostrarPersona(p);
}
Del ejemplo anterior