Beruflich Dokumente
Kultur Dokumente
ndice
Apuntadores.......................................................................................................... 4
Declaracin de un apuntador...................................................................................4
Al trabajar con apuntadores se emplean dos operadores especficos:......................6
Aritmtica de apuntadores:..................................................................................... 8
Ejemplo de apuntadores:........................................................................................ 9
Conclusin........................................................................................................... 11
Infografa.............................................................................................................. 12
Apuntadores
Declaracin de un apuntador
Ejemplos:
Codigo C y C++
int *ptr1; // Apuntador a un dato de tipo entero (int)
char *cad1, *cad2; // Dos apuntadores a datos de tipo carcter (char)
float *ptr2; // Apuntador a un dato de tipo punto-flotante (float)
int *ptrTotal;
//Estamos diciendo ptrTotal es un puntero que apunta a un valor entero (int).
double *ptrLiquidacion;
//ptrLiquidacion apunta a un valor double.
int *ptrTotal, contador;
//aqu tenemos una variable ptrTotal que apunta a un entero
//y una variable contador de tipo entera.
//no se debe asumir que contador es tambin un apuntador, ya que el *
No se distribuye.
el
operador
en
las
instrucciones:
*p = 27;
*p1 = 1;
p2 = &b;
*p2 = 2;
p1 = p2;
*p1 = 0;
p2 = &c;
Apuntadores
*p2 = 3;
printf("%d %d %d\n", a, b, c);
p = &p1;
p1 = p2;
*p1 = 1;
printf("%d %d %d\n", a, b, c);
}
// Paso 8. c = 3
// Paso 9. Qu se imprime?
// Paso 10. p contiene la direccin de p1
// Paso 11. p1= p2;
// Paso 12. c = 1
// Paso 13. Qu se imprime?
a
00
00
1
1
1
1
1
1
1
1
1
1
1
1
b
0
0
2
2
0
0
0
0
0
0
0
0
c
00
04
3
3
3
3
1
1
p1
00
06
000
0
000
0
000
0
000
0
000
2
000
2
002
000
2
000
2
000
2
000
4
000
4
000
4
p2
00
08
p3
00
10
000
2
000
2
000
0
000
2
000
4
000
4
000
4
000
4
000
4
000
6
000
4
00
06
00
06
00
06
00
06
JAVIER BALSAS
Apuntadores
Aritmtica de apuntadores:
A una variable apuntador se le puede asignar la direccin de cualquier objeto.
-
Si tenemos:
float *decimal;
decimal++;
JAVIER BALSAS
Apuntadores
Ejemplo de apuntadores:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
int x;
int y;
int *ptrEntero;
int *ptr2Entero;
ptrEntero = &x;
ptr2Entero = &y;
*ptrEntero = 1;
*ptr2Entero = 5;
cout << "El valor de x es: " << x << endl;
*ptrEntero += 5;
cout << "El valor de x, luego de incrementar 5 a *ptrEntero, es: "
<< x << endl;
cout << "El valor de y es: " << y << endl;
cout << "El valor de &y es: " << &y << endl;
cout << "El valor de ptr2Entero es: " << ptr2Entero << endl;
cout << "El valor de *ptr2Entero es: " << *ptr2Entero << endl;
cout << "El valor de &ptr2Entero es: " << &ptr2Entero << endl;
cout << "El valor de &*ptrEntero es: " << &*ptrEntero << " y el
valor de
*&ptrEntero es: " << *&ptrEntero << endl;
cout << "FIN DEL PROGRAMA :)" << endl;
return 0;
}
JAVIER BALSAS
Apuntadores
Ejemplo 2
#include<stdio.h>
int main(void)
{
int p,*ptr; //Un apuntador debe definirse del //mismo
tipo de la var apuntada
int *ptr2;
int **ptr3; //Definicin de un doble apuntador
p=0;
ptr=&p; //Segunda etapa: Asignacin de la //referencia
printf("p:%d\n",p);
printf("*ptr:%d; &ptr:%ld\n",*ptr,&ptr); //Indireccin y
direccin
printf("*&ptr:%ld; &*ptr:%p\n",*&ptr,&*ptr)
//*& y &* son complementarios
ptr2=ptr; //Un apuntador puede apuntar a otro
printf("*ptr:%d; *ptr2:%d\n",*ptr,*ptr2)
// %p es el formato para imprimir un puntero en su valor
HEXADECIMAL, funciona igual que %X
printf("*&ptr:%X\n",*&ptr);//Imprime la //direccin HEXA
de lo que se est apuntando
printf("&*ptr:%p\n",&*ptr);//Igual al anterio
printf("ptr:%X\n",&p);/*Imprime la direccin de la var p,
obviamente imprime lo mismo que la linea precedente*/
printf("&ptr:%X\n",&ptr);//Imprime la direccin //HEXA
donde esta el apuntador
printf("ptr:%X\n",ptr);/*Imprime lo que contiene la
variable apuntador, es decir la direccin de lo apuntado*/
printf("ptr:%ld\n",ptr2);/*Imprime lo que contiene la
variable apuntador, es decir la direccin de lo apuntado*/
*ptr3=ptr2; //El doble apuntador toma la //direccin de
un apuntador simple
printf("*ptr3:%p\n",&*(*ptr3));/*Imprime la direccin de
lo apuntado, note las implicaciones de imprimir un doble
apuntador*/
getchar();
getchar();
return 0;
}
JAVIER BALSAS
1
0
Apuntadores
Conclusin
Los apuntadores son una gran ayuda para referenciar variables. Su uso es
demasiado delicado. Un apuntador siempre referenciar direcciones. Un doble
apuntador es "una referencia de otra referencia". Los tipos de datos de apuntador
y variable apuntada deben coincidir. La memoria RAM direcciona todo en Sistema
HEXADECIMAL. Los apuntadores por defecto operan sobre direcciones HEXA. Un
operador puede ser impreso como HEXA o en su equivalente Entero Largo. Una
prctica sana es definir enteros largos sin signo para su manejo direccional.
Infografa
JAVIER BALSAS
1
1
Apuntadores
http://artemisa.unicauca.edu.co/~wpantoja/web/lab_int_inf/punteros_basico.ht
ml
Programacion en C++, del autor Luis Joyanes Aguilar, editorial Mc Graw Hill.
http://www.utm.mx/~mgarcia/PE7(Apuntadores).pdf
http://www.uhu.es/04004/material/Transparencias6.pdf
JAVIER BALSAS
1
2