Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guia Lab Punt Eros
Guia Lab Punt Eros
GUIA DE LABORATORIO
PUNTEROS
Introducción:
Un puntero es una variable que contiene la dirección de un objeto ya sea otra variable, un vector,
estructura, etc . Cuando se declara un puntero éste contiene una dirección arbitraria, si leemos a
dónde apunta nos dará un valor indefinido y si se escribe en tal dirección estamos variando el
contenido de una posición de memoria. Los punteros son útiles para: modificar los argumentos
en las funciones, asignación dinámica de memoria y la optimización de uso de la misma.
La presente guía pretende ejemplificar el uso de los punteros en diferentes situaciones para una
mejor comprensión de su uso.
Objetivo:
Que el estudiante conozca y practique el uso de los punteros en C.
Ejemplo 1
Objetivo del programa: Mostrar el uso de los operadores básicos en la declaración de punteros
Empleando el direccionamiento y el operador de indirección.
#include <stdio.h>
#include <conio.h>
void main(void) {
int a;
int *punt; //declaración de puntero.
a=57; //inicialización de variable
punt=&a; //asignación de dirección al puntero.
clrscr();
printf("a = %d", a); //imprimo valor de variable
printf("\n&a = %x", &a); //imprimo dirección variable apuntada (en hexadecimal)
printf("\npunt = %x ", punt); //imprimo la dirección guardada (la de la variable apuntada)
printf("\n*punt = %d", *punt); //imprimo el contenido de la dirección apuntada.
printf("\ntama¤o puntero %d", sizeof(punt));
getch();
}
Ejemplo 2
Objetivo del programa: Manipular el contenido de variables de diferentes tipos de datos a
través de la aplicación de punteros.
#include <stdio.h>
#include <conio.h>
void main() {
char carac='A', *r;
int a=12,b=45, c;
Ejemplo 3
Objetivo del programa: Aplicar la notación de punteros para manipular un arreglo. Note que el
arreglo tiene una limitante relacionada a la cantidad de memoria
reservada.
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#define MAXCOL 30
void main() {
int nfila, ncol, f, c,(*a)[MAXCOL];
clrscr();
puts("Intro n§ de filas:");
scanf("%d", &f);
puts("Introducir numero de columnas:");
scanf("%d", &c);
puts("Llenamos el array:");
for(nfila=0; nfila<f; nfila++)
for(ncol=0; ncol<c; ncol++) {
printf("(*(a+%d)+%d) = ", nfila, ncol);
scanf("%d", *(a+nfila)+ncol);
}
puts("Imprimimos el array:");
for(nfila=0; nfila<f; nfila++)
{
for(ncol=0; ncol<c; ncol++)
printf(" %d",*(*(a+nfila)+ncol));
puts("");
Ejemplo 4
Objetivo del programa: Referenciar a un arreglo como un puntero a un grupo de arreglos
contiguos.
#include <stdio.h>
#include <conio.h>
void main() {
int x[2][3], fil, col;
clrscr();
puts("Llenamos el array");
for(fil=0; fil<2; fil++)
for(col=0; col<3; col++)
{
printf("x[%d][%d] = ", fil, col);
scanf("%d", &x[fil][col]);
}
printf("\nImprimimos usando un puntero a un grupo de arrays:\n");
printf("\nPRIMERA FILA:\n");
for(col=0; col<3; col++)
printf(" %d", (*x)[col]);
printf("\nSEGUNDA FILA:\n");
for(col=0; col<3; col++)
printf(" %d", (*(x+1))[col]);
getch();
}
Ejemplo 5
Objetivo del programa: Mostrar el acceso al contenido de un arreglo a través de la declaración
de un puntero hacia esa estructura.
#include <conio.h>
#include <stdio.h>
void main() {
int mat[] = {1,2,3,4}, *pmat, i;
clrscr();
printf("\Empleamos notación decimal\n");
printf("Hacemos que el puntero señale al primer elemento del array: pmat = mat");
pmat = mat;
//pmat=&mat[0]; //ES LO MISMO QUE pmat =mat
printf("\nComprobamos los valores: ");
printf("\nDirección de inicio del array: mat = %u", &mat[0]);
getch();
printf("\nDirección de pmat: &pmat = %u", &pmat);
Ejemplo 6
Objetivo del programa: Declarar un puntero a una cadena de caracteres e imprimirlo carácter
a carácter hasta que detecta, en el bucle do...while el carácter nulo
de final de cadena ('\0')
#include <stdio.h>
#include <conio.h>
void main() {
char *nombre = "PEPE PEREZ";
int i=0;
clrscr();
do
printf("%c", *(nombre+i));
while(*(nombre+i++)); //postincremento de i, para cambiar VCB
puts(" "); //imprime blanco ,m s salto de l¡nea.
puts(nombre);
getch();
}
Ejemplo 7
Objetivo del programa: Manipular estructuras de memoria estáticas, empleando subíndices y
aritmética de punteros.
#include <stdio.h>
#include <conio.h>
void main() {
float mat[2][4] = {
{1.45, -2.35, -14.08, 17.3}, //primera fila
{20, 2.95, 0.082, 6.023} //segunda fila
};
int i, j;
clrscr();
puts("Imprimimos las direcciones de memoria y valores contenidos:");
puts("\nDireccción de memoria &mat[i][j] \t\tContenido mat[i][j]");
for(i=0;i<2; i++)
Ejemplo 8
Objetivo del programa: acceder a los datos de un arreglo bidimensional, empleando subíndices
y aritmética de punteros.
void main() {
int i;
char mat[FILAS][COLUMNAS]= {{1,2},{3,4},{5,6}};
clrscr();
puts("Imprimimos como array:");
getch();
Ejemplo 9
Objetivo del programa: Emplear notación de punteros para manipular un arreglo
unidimensional de punteros
#include "stdio.h"
#include "conio.h"
void main() {
int i,j;
int *p[4]; //array de punteros//
int **px=p; //px es un puntero a un puntero//
clrscr();
printf("Introduzca 16 valores enteros\n");
for (i=0; i<4; i++)
for (j=0; j<4; j++)
scanf ("%d", *(px+i)+j);
Ojo es vector y se maneja como matriz corregir en 9 y 10 ver si se deja con un ciclo o 2.
Ejemplo 10
Objetivo del programa: Presentar un arreglo unidimensional de punteros y un puntero a
puntero, introducirle valores e imprimirlo.
#include <stdio.h>
#include <conio.h>
void main() {
int i,j;
int *p[4]; //array de punteros//
int **px=p; //px es un puntero a un puntero//
clrscr();
printf ("Introduzca 16 valores enteros:\n");
for (i=0; i<4; i++)
for (j=0; j<4; j++)
scanf ("%d", &px[i][j]);
Ejemplo 11
Objetivo del programa: Mostrar las direcciones de memoria y los contenidos de la misma, al
emplear arreglos unidimensionales y aritmética de punteros
#include <stdio.h>
#include <conio.h>
void main() {
int mat[] = {2, 16, -4, 29, 234, 12, 0, 3}, i =0;
system(cls);
puts("Imprimimos las direcciones de memoria y valores contenidos:");
puts("\nDireccción de memoria &mat[i] \t\tContenido mat[i]");
for ( ; i<8 ; i++)
printf("\n\t&mat[%d] = %p \t\t mat[%d] = %d", i,&mat[i], i, mat[i]);
getch();
printf("\n\nRepetimos los resultados empleando notación de punteros:\n");
getch();
puts("\nDireccción de memoria mat + i \t\tContenido *(mat+i)");
for( i=0 ; i<8 ; i++)
printf("\n\tmat+%d = %p \t\t\t *(mat+%d) = %d", i, mat+i, i, *(mat+i));
getch();
EJERCICIOS
a) float ( *x ) ( int *a );
____________________________________________________________________
____________________________________________________________________