Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivo de la clase:
Identificar el funcionamiento de la variable
puntero en la referencia a los datos
3.5. Punteros
Punteros
1. Punteros y direcciones
2. Aritmética de direcciones
3. Usos del puntero
3.1 apuntar a una variable simple (tipos de datos básicos)
3.2 apuntar a un arreglo
3.3 apuntar a una estructura
3.4 apuntar a un arreglo de estructura
3.5 con funciones propias del programador (envío e
parámetros por referencia mediante punteros) Capítulo 4
Introducción
• Definición
• Es una variable que guarda una dirección de memoria de
otra variable
• Sintaxis
tipo_dato *nombre_puntero;
• Ejemplo
int *p1; double *p3;
float *p2; char *p4;
Consideraciones generales
• En la siguiente declaración:
int *p, n;
p=&n; //guarda la dirección de memoria de n
p es una variable de tipo puntero a un entero
n es una variable de tipo entero
• Otro ejemplo
int *p; float m; p=&m; ERROR
• Ejemplo:
int *p, n;
p=&n; //asigna dirección variable n al puntero p
Operador indirección *
• Ejemplo:
int *p,n, x;
p=&n;
n = 8;
x = *p; // *p se refiere al contenido de la variable n
printf(“%d”,x); //imprime 8
Veamos ejemplo gráfico
/*indirección: valor de la
variable que apunta */
printf(“%d”, *p); //saldrá 10
El valor NULL (nulo)
• Ejemplo
int *p;
p=NULL; //puntero está encerado
Ejemplo 1
Si ejecutamos:
b: 5
p: 23000 //asumiendo
p: 5
Ejemplo 2
Si ejecutamos:
b: 5
p: 23000 //asumiendo
p: 5
resultado: 15
Ejemplo 3
Si ejecutamos:
b: 5
p: 23000 //asumiendo
p: 5
resultado: 15
resultado: 13
Ejemplo 4
21FF0 23FF7
28FX0
Aritmética de punteros
• Operaciones básicas
• Incremento
p = p + 1;
p++;
• decremento
p = p – 1;
p--;
Operador +
•Cada vez que un apuntador se incrementa,
apunta a la localidad de memoria del siguiente
elemento de su tipo base.
3501
3500
p = p + 1;
p p
p ++;
Operador +
2502
p2 2504
Operador -
• Ejemplo p2 2496
int *p1, *p2; int x; p1=&x;
2497
p2 = p1 - 4;
2498
2499
p1 2500
Funciones para punteros
Sizeof.- Extrae el
tamaño en bytes
malloc .- Reserva memoria
para un dato
Función malloc y free
m[0]
• En la expresión *(p+2)
• al sumar 2 al apuntador p, no se está sumando el número
2 sino que se está avanzando 2 posiciones en la memoria;
• es decir, p es un apuntador a entero, por lo que al sumarle
2 se avanza el espacio de memoria necesario para avanzar
2 posiciones enteras.
int *p;
p = array;
*p = 20;
*(p + 2) = 40;
*(array + 5) = 60;
p2--;
printf("se le resta 1, p2 apunta a: %d\n",*p2);
p1=p1+2;
printf("se le suma 2, p1 apunta a: %d\n",*p1);
p1=p1-3;
printf("se le resta 3, p1 apunta a: %d\n",*p1);
getch();
return 0; }
Ejemplo 4
#include <conio.h>
#include <stdio.h>
int main() {
int notas[5] = {0, 0, 0, 0, 0};
int *p;
p = notas;
Operador punto .
(para una variable struct)