SlideShare une entreprise Scribd logo
1  sur  4
Télécharger pour lire hors ligne
Facultad de Informática, Electrónica y Comunicación
Estructuras de datos -Inf200 e Inf212
Apuntadores
Diego Santimateo G. / Giannina Núñez M. 1
Punteros o apuntadores o pointers
Un puntero es una variable que contiene una dirección de memoria. Normalmente, esa dirección
es la posición de otra variable en la memoria. Si la variable p de tipo float, está en la dirección 1111 y la
variable ptr en la dirección 1021, entonces, si el contenido de ptr es la dirección de p, es decir 1111,
decimos que ptr es un apuntador a p.
Algunas consideraciones para utilizar punteros o apuntadores:
 Existen dos operadores especiales de punteros: & y *. El operador de dirección (&)
devuelve la dirección de memoria de su operando. El operador de indirección (*)
devuelve el contenido de la dirección apuntada por el operando.
 Los punteros apuntan a un tipo de variable, el cual se define en la declaración, por
ejemplo;
 int *ptr1; /* apunta solo a variables tipo int */
 float *ptr; /* apunta solo a variables tipo float */
 char *prt2; /* apunta solo a variable tipo char */
 El operador de dirección & delante del nombre de una variable nos devuelve la dirección
de la variable, ejemplo;
 int a; ptr1 = &a;
 float p, q; ptr = &p;
 El valor apuntado por un puntero se obtiene con el operador de indirección *. Si usamos
la ilustración anterior *ptr corresponde al valor 45.23 de la variable p. Si hacemos q =
*ptr; entonces q y p tienen el mismo valor, pero ptr no apunta a q, sino a p.
 En conclusión, si ptr contiene la dirección de memoria de la variable p, entonces ptr
apunta a p y *ptr indica el contenido de p, es decir, cuando se modifica o cambia el valor
de *ptr se cambia también el valor de la variable p. Concretamente si hacemos *ptr =
100; entonces, el valor de la variable p también es 100. Todo esto se da porque ptr a
punta a p o de manera equivalente, porque ptr contiene la dirección de p.
De manera general una declaración de un puntero consiste en un tipo base(int, char, flotat), un
asterisco * y el nombre de la variable. La forma general es:
tipo *nombre_de _variable;
Se pueden declarar apuntadores a una estructura:
typedef struct {
int edad;
float salario; /* declaración de tipo estructura global */
char nom[15];
}xxx;
xxx *ptr3; /* apuntador al tipo de estructura xxx */
1111
1021
45.23
1111ptr
p
Facultad de Informática, Electrónica y Comunicación
Estructuras de datos -Inf200 e Inf212
Apuntadores
Diego Santimateo G. / Giannina Núñez M. 2
Asignación de punteros
Como en el caso de cualquier otra variable, un puntero puede utilizarse a la derecha de una
declaración de asignación para asignar su valor a otro puntero. Por ejemplo:
int x;
int *p1,*p2;
p1=&x;
p2=p1;
Tanto p1 como p2 apuntan a x.
Operaciones con punteros
Existen sólo dos operaciones aritméticas que se pueden usar con punteros: la suma y la resta.
Cada vez que se incrementa en una unidad un puntero, apunta a la posición de memoria del siguiente
elemento de su tipo base(int, flota, char). Cada vez que se disminuye en una unidad, apunta a la posición
del elemento anterior. Con punteros a variables del tipo char(un byte) parece una aritmética normal, sin
embargo, el resto de los punteros aumentan o decrecen dependiendo de la longitud del tipo de datos a
los que apuntan, piense en el tamaño de un registro. Por ejemplo, si asumimos que los enteros son de
dos bytes de longitud y p1 es un puntero a entero con valor actual 2000. Entonces, después de la
expresión p1++; p1 contiene el valor 2002, no 2001.
Las variables punteros pueden ser comparadas siempre que éstas apunten a un mismo tipo de
datos, por ejemplo;
Int *ptr1, *ptr2;
Podemos usar las siguientes expresiones lógicas:
 ptr1 < ptr2 ptr2 >= ptr1
 ptr1 == ptr2 ptr2 != ptr1
 ptr == NULL
Punteros y arrays
Existe una estrecha relación entre los punteros y los arreglos. Recuerde que el nombre de un
arreglo se considera puntero a la primera posición.
char linea[80], *prt2;
prt2 = linea;
Aquí, prt2 ha sido asignado a la dirección del primer elemento del vector linea. Para acceder al
quinto elemento de linea se escribe linea[4] o *(prt2 + 4). Los punteros pueden almacenarse en arreglos
como cualquier otro tipo de datos. Por ejemplo, para un arreglo de 10 punteros a tipo entero, la
declaración es: int *x[10]; Para asignar la dirección de una variable entera llamada var al tercer
elemento de x se escribe: x[2] = &var; El valor de la variable var corresponde a *x[2];(valor que es
apuntado por x[2]).
Indirección múltiple
Se puede hacer que un puntero apunte a otro puntero que apunte a un valor de destino. Esta
situación se denomina indirección múltiple o punteros a punteros. Una variable que es puntero a puntero
tiene que declararse como tal. Esto se hace colocando un asterisco (*) adicional en frente del nombre de
la variable. Por ejemplo, la siguiente declaración indica al compilador que ptr es un puntero a puntero de
tipo float:
float **ptr;
Funciones de asignación dinámica, malloc() y free()
Hasta el momento hemos trabajado con estructuras de datos estáticas, no obstante los punteros
proporcionan el soporte necesario para manejar estructuras de datos dinámica en C. La asignación
dinámica es la forma en la que un programa puede obtener memoria mientras se está ejecutando y
también puede liberarla cuando sea necesario.
Facultad de Informática, Electrónica y Comunicación
Estructuras de datos -Inf200 e Inf212
Apuntadores
Diego Santimateo G. / Giannina Núñez M. 3
El centro del sistema de asignación dinámica está compuesto por las funciones (existentes en la
biblioteca stdlib.h)
 malloc(), que asigna memoria y devuelve un puntero a un char.
 free() que la devuelve o la libera.
Podemos invocar a la función malloc() así:
ptr =malloc( n * sizeof(tipo de dato));
Tras una llamada fructífera, malloc() devuelve un puntero a un caracter, de manera que en el
ejemplo, la declaración de ptr es char *ptr. Si no hay suficiente memoria libre para satisfacer la petición
de malloc(), se devuelve el apuntador nulo. En el siguiente código se asigna en tiempo de ejecución 50
posiciones enteras (un vector de 50 posiciones)
int *ptr2;
ptr2 = (int *) malloc(50 * sizeof(int));
Nótese que se ha hecho una conversión del tipo char que devuelve malloc, a tipo int de ptr2. Después de
la asignación, ptr2 apunta a la primera posición entera de las 50 solicitadas.
La función free() es la opuesta de malloc() porque devuelve al sistema la memoria previamente
asignada. Una vez que la memoria ha sido liberada, puede ser reutilizada en una posterior llamada a
malloc(). El prototipo de la función free() es:
void free (void *p);
free(p);
Listas dinámicas
Si se desea crear una lista dinámica cuyos nodos contengan diferentes tipos de datos, entonces,
es necesario definir una estructura o registro que contenga un apuntador para ir enlazando los nodos, tal
como se muestra en el diagrama:
La siguiente declaración se ajusta al diagrama:
struct elementonodo {
int inf;
struct elementonodo *sig;
};
typedef struct elementonodo nodo; /* nodo es un tipo de estructura */
nodo *inicio, *ptr; / declara apuntadores al tipo nodo */
Para crear cada nodo se usa:
inf. sig inf. sig inf. sig inf sig
Nodo1 Nodo2 Nodo3 Nodo4
Inicio
Null
Facultad de Informática, Electrónica y Comunicación
Estructuras de datos -Inf200 e Inf212
Apuntadores
Diego Santimateo G. / Giannina Núñez M. 4
ptr = (nodo * ) malloc (sizeof(nodo)); /* reserva espacio para un nodo */
La primera vez inicio = ptr;
Podemos acceder a un campo de la estructura así:
ptr -> inf = 100;
ptr -> sig = NULL;
¿Cómo hacer para ir añadiendo nodos a la lista? ... escriba el código necesario.
Ejemplos de uso de la función malloc
#include <stdio.h>
#include <stdlib.h>
void main()
{
int *pint;
float *preal;
char *pcar;
typedef struct{
int num;
char nombre[10];
} estructura;
estructura *pestr; // apuntador a tipo estructura
struct datos{ //estructura que incluye un puntero
int num;
char nombre[10];
struct datos *liga;
};
typedef struct datos nodo;
nodo *nuevo;
// crea área de memoria para un entero
pint = (int *)malloc (sizeof(int));
scanf ("%d", pint);
printf ("%dn", *pint);
pcar = (char *)malloc(sizeof(char));
*pcar = 'a';
printf("%cn",*pcar);
preal = (float *)malloc(sizeof(float));
scanf ("%f",preal);
printf("%fn",*preal);
// crea área para un tipo estructura
pestr = (estructura *)malloc(sizeof(estructura));
scanf ("%d",&pestr->num);
printf("%dn",pestr->num);
scanf ("%s",pestr->nombre);
printf("%sn",pestr->nombre);
nuevo = (nodo *)malloc(sizeof(nodo));
scanf ("%d",&nuevo->num);
printf("%dn",nuevo->num);
scanf ("%s",nuevo->nombre);
printf("%sn",nuevo->nombre);
nuevo ->liga = NULL;
printf ("n fin");
}

Contenu connexe

Tendances

Install dan konfigurasi snort di linux debian/Ubuntu
Install dan konfigurasi snort di linux debian/UbuntuInstall dan konfigurasi snort di linux debian/Ubuntu
Install dan konfigurasi snort di linux debian/Ubuntumanafhsb
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan led Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan led Wesnu Prajati
 
Punteros en c
Punteros en cPunteros en c
Punteros en cfcosunt
 
Tipe dan format instruksi 2
Tipe dan format instruksi 2Tipe dan format instruksi 2
Tipe dan format instruksi 2Rosyid Ridlo
 
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones Anllel Cardenas Yllanes
 
MultiProgramming and Time Sharing
MultiProgramming and Time SharingMultiProgramming and Time Sharing
MultiProgramming and Time SharingTri Sugihartono
 
Analisis Semantik - P6
Analisis Semantik - P6Analisis Semantik - P6
Analisis Semantik - P6ahmad haidaroh
 
Artikel Counter sinkron dan asinkron
Artikel Counter sinkron dan asinkronArtikel Counter sinkron dan asinkron
Artikel Counter sinkron dan asinkronIGustingurahKanha
 
CFG dan PARSING - P 5 - Teknik Kompilasi
CFG dan PARSING - P 5 - Teknik KompilasiCFG dan PARSING - P 5 - Teknik Kompilasi
CFG dan PARSING - P 5 - Teknik Kompilasiahmad haidaroh
 
Calculo de filtros
Calculo de filtrosCalculo de filtros
Calculo de filtrostooorrr
 
Matching impedance
Matching impedanceMatching impedance
Matching impedanceampas03
 

Tendances (20)

Bab 4 register
Bab 4   registerBab 4   register
Bab 4 register
 
Install dan konfigurasi snort di linux debian/Ubuntu
Install dan konfigurasi snort di linux debian/UbuntuInstall dan konfigurasi snort di linux debian/Ubuntu
Install dan konfigurasi snort di linux debian/Ubuntu
 
Bab 5 komputer sederhana sap-1
Bab 5   komputer sederhana sap-1Bab 5   komputer sederhana sap-1
Bab 5 komputer sederhana sap-1
 
Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan led Laporan praktikum mikrokontroler dengan led
Laporan praktikum mikrokontroler dengan led
 
Punteros en c
Punteros en cPunteros en c
Punteros en c
 
Tipe dan format instruksi 2
Tipe dan format instruksi 2Tipe dan format instruksi 2
Tipe dan format instruksi 2
 
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones
 
MultiProgramming and Time Sharing
MultiProgramming and Time SharingMultiProgramming and Time Sharing
MultiProgramming and Time Sharing
 
Procesadores
ProcesadoresProcesadores
Procesadores
 
Transistor
TransistorTransistor
Transistor
 
tema 01 sistemas digitales
tema 01 sistemas digitalestema 01 sistemas digitales
tema 01 sistemas digitales
 
Analisis Semantik - P6
Analisis Semantik - P6Analisis Semantik - P6
Analisis Semantik - P6
 
TEKNIK ENKRIPSI DAN DEKRIPSI HILL CIPHER
TEKNIK ENKRIPSI DAN DEKRIPSI HILL CIPHERTEKNIK ENKRIPSI DAN DEKRIPSI HILL CIPHER
TEKNIK ENKRIPSI DAN DEKRIPSI HILL CIPHER
 
Artikel Counter sinkron dan asinkron
Artikel Counter sinkron dan asinkronArtikel Counter sinkron dan asinkron
Artikel Counter sinkron dan asinkron
 
CFG dan PARSING - P 5 - Teknik Kompilasi
CFG dan PARSING - P 5 - Teknik KompilasiCFG dan PARSING - P 5 - Teknik Kompilasi
CFG dan PARSING - P 5 - Teknik Kompilasi
 
Prosesor Intel
Prosesor IntelProsesor Intel
Prosesor Intel
 
Calculo de filtros
Calculo de filtrosCalculo de filtros
Calculo de filtros
 
Sumador\Restador
Sumador\RestadorSumador\Restador
Sumador\Restador
 
Matching impedance
Matching impedanceMatching impedance
Matching impedance
 
Register geser
Register geserRegister geser
Register geser
 

En vedette

En vedette (9)

07 - Tipos de datos definidos por el programador en lenguaje C: struct, typed...
07 - Tipos de datos definidos por el programador en lenguaje C: struct, typed...07 - Tipos de datos definidos por el programador en lenguaje C: struct, typed...
07 - Tipos de datos definidos por el programador en lenguaje C: struct, typed...
 
Punteros
PunterosPunteros
Punteros
 
Introducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje CIntroducción a las funciones en el lenguaje C
Introducción a las funciones en el lenguaje C
 
Apuntadores-Programación
Apuntadores-ProgramaciónApuntadores-Programación
Apuntadores-Programación
 
06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C06 - Arrays y matrices en lenguaje C
06 - Arrays y matrices en lenguaje C
 
08 - Punteros en lenguaje C
08 - Punteros en lenguaje C08 - Punteros en lenguaje C
08 - Punteros en lenguaje C
 
Punteros a Funciones en C
Punteros a Funciones en CPunteros a Funciones en C
Punteros a Funciones en C
 
Estructuras punteros
Estructuras punterosEstructuras punteros
Estructuras punteros
 
Tutoria Lenguaje C++
Tutoria Lenguaje C++Tutoria Lenguaje C++
Tutoria Lenguaje C++
 

Similaire à Introducción a los Punteros en el lenguaje C

Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamientoSergio Ramos
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621Luis Miguel
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.comFresyMetal
 
Gestión Dinámica de la Memoria
Gestión Dinámica de la MemoriaGestión Dinámica de la Memoria
Gestión Dinámica de la MemoriaMago Julio Cesar
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)MarielaCuriel
 
Apuntadores
ApuntadoresApuntadores
Apuntadoresluisabn
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4hassanbadredun
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaJhosse Ant Siilva
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programaciondiego MC
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++die_dex
 
Tema 3 punteros
Tema 3 punterosTema 3 punteros
Tema 3 punterosAFHS
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datosluna_72
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación cvictdiazm
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacionYsaac Ruiz
 

Similaire à Introducción a los Punteros en el lenguaje C (20)

Apuntadores y direccionamiento
Apuntadores y direccionamientoApuntadores y direccionamiento
Apuntadores y direccionamiento
 
Luis hernandez 22310621
Luis hernandez   22310621Luis hernandez   22310621
Luis hernandez 22310621
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.com
 
Gestión Dinámica de la Memoria
Gestión Dinámica de la MemoriaGestión Dinámica de la Memoria
Gestión Dinámica de la Memoria
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
Apuntadorkeurjeh4jj4by un 4hh4j4u4jj4h4y4jh4
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacion
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++
 
Tema 3 punteros
Tema 3 punterosTema 3 punteros
Tema 3 punteros
 
Punteros2
Punteros2Punteros2
Punteros2
 
Estructura de Datos
Estructura de DatosEstructura de Datos
Estructura de Datos
 
Punteros
PunterosPunteros
Punteros
 
Teoria punteros
Teoria punterosTeoria punteros
Teoria punteros
 
Punteros
PunterosPunteros
Punteros
 
Apuntadores y listas
Apuntadores y listasApuntadores y listas
Apuntadores y listas
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación c
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
 
Estructuras dinámicas de datos
Estructuras dinámicas de datosEstructuras dinámicas de datos
Estructuras dinámicas de datos
 

Plus de Diego Santimateo

CRUVFIEC - Boletin3 - octubre - 2015
CRUVFIEC - Boletin3 - octubre - 2015CRUVFIEC - Boletin3 - octubre - 2015
CRUVFIEC - Boletin3 - octubre - 2015Diego Santimateo
 
Propuesta de entorno virtual de aprendizaje
Propuesta de entorno virtual de aprendizajePropuesta de entorno virtual de aprendizaje
Propuesta de entorno virtual de aprendizajeDiego Santimateo
 
CRUVFIEC - Boletin2 - mayo - 2015
CRUVFIEC - Boletin2 - mayo - 2015CRUVFIEC - Boletin2 - mayo - 2015
CRUVFIEC - Boletin2 - mayo - 2015Diego Santimateo
 
Boletín2 - CRUVFIEC - 2014
Boletín2 - CRUVFIEC - 2014Boletín2 - CRUVFIEC - 2014
Boletín2 - CRUVFIEC - 2014Diego Santimateo
 
Boletín1 - CRUV-FIEC- 2014
Boletín1 - CRUV-FIEC- 2014Boletín1 - CRUV-FIEC- 2014
Boletín1 - CRUV-FIEC- 2014Diego Santimateo
 
Programación del curso inf212 - POO
Programación del curso inf212 - POOProgramación del curso inf212 - POO
Programación del curso inf212 - POODiego Santimateo
 
Reflexiones: TICs en la Educación
Reflexiones: TICs en la EducaciónReflexiones: TICs en la Educación
Reflexiones: TICs en la EducaciónDiego Santimateo
 
Estacion Meterológica CRUV
Estacion Meterológica CRUVEstacion Meterológica CRUV
Estacion Meterológica CRUVDiego Santimateo
 
VIII Jornada Informatica-CRUV-FIEC- 2012
VIII Jornada Informatica-CRUV-FIEC- 2012VIII Jornada Informatica-CRUV-FIEC- 2012
VIII Jornada Informatica-CRUV-FIEC- 2012Diego Santimateo
 
Introdución a la programacion
Introdución a la programacionIntrodución a la programacion
Introdución a la programacionDiego Santimateo
 

Plus de Diego Santimateo (19)

Concepto de Funciones
Concepto de FuncionesConcepto de Funciones
Concepto de Funciones
 
Boletín1 mayo 2016
Boletín1 mayo 2016Boletín1 mayo 2016
Boletín1 mayo 2016
 
CRUVFIEC - Boletin3 - octubre - 2015
CRUVFIEC - Boletin3 - octubre - 2015CRUVFIEC - Boletin3 - octubre - 2015
CRUVFIEC - Boletin3 - octubre - 2015
 
Propuesta de entorno virtual de aprendizaje
Propuesta de entorno virtual de aprendizajePropuesta de entorno virtual de aprendizaje
Propuesta de entorno virtual de aprendizaje
 
Actividad symbaloo
Actividad symbalooActividad symbaloo
Actividad symbaloo
 
CRUVFIEC - Boletin2 - mayo - 2015
CRUVFIEC - Boletin2 - mayo - 2015CRUVFIEC - Boletin2 - mayo - 2015
CRUVFIEC - Boletin2 - mayo - 2015
 
Boletin2 2012
Boletin2 2012Boletin2 2012
Boletin2 2012
 
Boletin CRUVFIEC-1- 2015
Boletin CRUVFIEC-1- 2015Boletin CRUVFIEC-1- 2015
Boletin CRUVFIEC-1- 2015
 
Boletín2 - CRUVFIEC - 2014
Boletín2 - CRUVFIEC - 2014Boletín2 - CRUVFIEC - 2014
Boletín2 - CRUVFIEC - 2014
 
Boletín1 - CRUV-FIEC- 2014
Boletín1 - CRUV-FIEC- 2014Boletín1 - CRUV-FIEC- 2014
Boletín1 - CRUV-FIEC- 2014
 
Boletin2 CRUV-FIEC 2013
Boletin2 CRUV-FIEC 2013Boletin2 CRUV-FIEC 2013
Boletin2 CRUV-FIEC 2013
 
Programación del curso inf212 - POO
Programación del curso inf212 - POOProgramación del curso inf212 - POO
Programación del curso inf212 - POO
 
Boletin1 CRUV-FIEC 2013
Boletin1 CRUV-FIEC 2013Boletin1 CRUV-FIEC 2013
Boletin1 CRUV-FIEC 2013
 
Reflexiones: TICs en la Educación
Reflexiones: TICs en la EducaciónReflexiones: TICs en la Educación
Reflexiones: TICs en la Educación
 
Estacion Meterológica CRUV
Estacion Meterológica CRUVEstacion Meterológica CRUV
Estacion Meterológica CRUV
 
VIII Jornada Informatica-CRUV-FIEC- 2012
VIII Jornada Informatica-CRUV-FIEC- 2012VIII Jornada Informatica-CRUV-FIEC- 2012
VIII Jornada Informatica-CRUV-FIEC- 2012
 
Boletin2 2012
Boletin2 2012Boletin2 2012
Boletin2 2012
 
Boletin CRUV-FIEC1- 2012
Boletin CRUV-FIEC1- 2012Boletin CRUV-FIEC1- 2012
Boletin CRUV-FIEC1- 2012
 
Introdución a la programacion
Introdución a la programacionIntrodución a la programacion
Introdución a la programacion
 

Dernier

Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
Estrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxEstrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxdkmeza
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesYanirisBarcelDelaHoz
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularMooPandrea
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoJosDanielEstradaHern
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfenelcielosiempre
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfFrancisco158360
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxnandoapperscabanilla
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIIsauraImbrondone
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 

Dernier (20)

Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Estrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxEstrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptx
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° grado
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdf
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA IIAFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
AFICHE EL MANIERISMO HISTORIA DE LA ARQUITECTURA II
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 

Introducción a los Punteros en el lenguaje C

  • 1. Facultad de Informática, Electrónica y Comunicación Estructuras de datos -Inf200 e Inf212 Apuntadores Diego Santimateo G. / Giannina Núñez M. 1 Punteros o apuntadores o pointers Un puntero es una variable que contiene una dirección de memoria. Normalmente, esa dirección es la posición de otra variable en la memoria. Si la variable p de tipo float, está en la dirección 1111 y la variable ptr en la dirección 1021, entonces, si el contenido de ptr es la dirección de p, es decir 1111, decimos que ptr es un apuntador a p. Algunas consideraciones para utilizar punteros o apuntadores:  Existen dos operadores especiales de punteros: & y *. El operador de dirección (&) devuelve la dirección de memoria de su operando. El operador de indirección (*) devuelve el contenido de la dirección apuntada por el operando.  Los punteros apuntan a un tipo de variable, el cual se define en la declaración, por ejemplo;  int *ptr1; /* apunta solo a variables tipo int */  float *ptr; /* apunta solo a variables tipo float */  char *prt2; /* apunta solo a variable tipo char */  El operador de dirección & delante del nombre de una variable nos devuelve la dirección de la variable, ejemplo;  int a; ptr1 = &a;  float p, q; ptr = &p;  El valor apuntado por un puntero se obtiene con el operador de indirección *. Si usamos la ilustración anterior *ptr corresponde al valor 45.23 de la variable p. Si hacemos q = *ptr; entonces q y p tienen el mismo valor, pero ptr no apunta a q, sino a p.  En conclusión, si ptr contiene la dirección de memoria de la variable p, entonces ptr apunta a p y *ptr indica el contenido de p, es decir, cuando se modifica o cambia el valor de *ptr se cambia también el valor de la variable p. Concretamente si hacemos *ptr = 100; entonces, el valor de la variable p también es 100. Todo esto se da porque ptr a punta a p o de manera equivalente, porque ptr contiene la dirección de p. De manera general una declaración de un puntero consiste en un tipo base(int, char, flotat), un asterisco * y el nombre de la variable. La forma general es: tipo *nombre_de _variable; Se pueden declarar apuntadores a una estructura: typedef struct { int edad; float salario; /* declaración de tipo estructura global */ char nom[15]; }xxx; xxx *ptr3; /* apuntador al tipo de estructura xxx */ 1111 1021 45.23 1111ptr p
  • 2. Facultad de Informática, Electrónica y Comunicación Estructuras de datos -Inf200 e Inf212 Apuntadores Diego Santimateo G. / Giannina Núñez M. 2 Asignación de punteros Como en el caso de cualquier otra variable, un puntero puede utilizarse a la derecha de una declaración de asignación para asignar su valor a otro puntero. Por ejemplo: int x; int *p1,*p2; p1=&x; p2=p1; Tanto p1 como p2 apuntan a x. Operaciones con punteros Existen sólo dos operaciones aritméticas que se pueden usar con punteros: la suma y la resta. Cada vez que se incrementa en una unidad un puntero, apunta a la posición de memoria del siguiente elemento de su tipo base(int, flota, char). Cada vez que se disminuye en una unidad, apunta a la posición del elemento anterior. Con punteros a variables del tipo char(un byte) parece una aritmética normal, sin embargo, el resto de los punteros aumentan o decrecen dependiendo de la longitud del tipo de datos a los que apuntan, piense en el tamaño de un registro. Por ejemplo, si asumimos que los enteros son de dos bytes de longitud y p1 es un puntero a entero con valor actual 2000. Entonces, después de la expresión p1++; p1 contiene el valor 2002, no 2001. Las variables punteros pueden ser comparadas siempre que éstas apunten a un mismo tipo de datos, por ejemplo; Int *ptr1, *ptr2; Podemos usar las siguientes expresiones lógicas:  ptr1 < ptr2 ptr2 >= ptr1  ptr1 == ptr2 ptr2 != ptr1  ptr == NULL Punteros y arrays Existe una estrecha relación entre los punteros y los arreglos. Recuerde que el nombre de un arreglo se considera puntero a la primera posición. char linea[80], *prt2; prt2 = linea; Aquí, prt2 ha sido asignado a la dirección del primer elemento del vector linea. Para acceder al quinto elemento de linea se escribe linea[4] o *(prt2 + 4). Los punteros pueden almacenarse en arreglos como cualquier otro tipo de datos. Por ejemplo, para un arreglo de 10 punteros a tipo entero, la declaración es: int *x[10]; Para asignar la dirección de una variable entera llamada var al tercer elemento de x se escribe: x[2] = &var; El valor de la variable var corresponde a *x[2];(valor que es apuntado por x[2]). Indirección múltiple Se puede hacer que un puntero apunte a otro puntero que apunte a un valor de destino. Esta situación se denomina indirección múltiple o punteros a punteros. Una variable que es puntero a puntero tiene que declararse como tal. Esto se hace colocando un asterisco (*) adicional en frente del nombre de la variable. Por ejemplo, la siguiente declaración indica al compilador que ptr es un puntero a puntero de tipo float: float **ptr; Funciones de asignación dinámica, malloc() y free() Hasta el momento hemos trabajado con estructuras de datos estáticas, no obstante los punteros proporcionan el soporte necesario para manejar estructuras de datos dinámica en C. La asignación dinámica es la forma en la que un programa puede obtener memoria mientras se está ejecutando y también puede liberarla cuando sea necesario.
  • 3. Facultad de Informática, Electrónica y Comunicación Estructuras de datos -Inf200 e Inf212 Apuntadores Diego Santimateo G. / Giannina Núñez M. 3 El centro del sistema de asignación dinámica está compuesto por las funciones (existentes en la biblioteca stdlib.h)  malloc(), que asigna memoria y devuelve un puntero a un char.  free() que la devuelve o la libera. Podemos invocar a la función malloc() así: ptr =malloc( n * sizeof(tipo de dato)); Tras una llamada fructífera, malloc() devuelve un puntero a un caracter, de manera que en el ejemplo, la declaración de ptr es char *ptr. Si no hay suficiente memoria libre para satisfacer la petición de malloc(), se devuelve el apuntador nulo. En el siguiente código se asigna en tiempo de ejecución 50 posiciones enteras (un vector de 50 posiciones) int *ptr2; ptr2 = (int *) malloc(50 * sizeof(int)); Nótese que se ha hecho una conversión del tipo char que devuelve malloc, a tipo int de ptr2. Después de la asignación, ptr2 apunta a la primera posición entera de las 50 solicitadas. La función free() es la opuesta de malloc() porque devuelve al sistema la memoria previamente asignada. Una vez que la memoria ha sido liberada, puede ser reutilizada en una posterior llamada a malloc(). El prototipo de la función free() es: void free (void *p); free(p); Listas dinámicas Si se desea crear una lista dinámica cuyos nodos contengan diferentes tipos de datos, entonces, es necesario definir una estructura o registro que contenga un apuntador para ir enlazando los nodos, tal como se muestra en el diagrama: La siguiente declaración se ajusta al diagrama: struct elementonodo { int inf; struct elementonodo *sig; }; typedef struct elementonodo nodo; /* nodo es un tipo de estructura */ nodo *inicio, *ptr; / declara apuntadores al tipo nodo */ Para crear cada nodo se usa: inf. sig inf. sig inf. sig inf sig Nodo1 Nodo2 Nodo3 Nodo4 Inicio Null
  • 4. Facultad de Informática, Electrónica y Comunicación Estructuras de datos -Inf200 e Inf212 Apuntadores Diego Santimateo G. / Giannina Núñez M. 4 ptr = (nodo * ) malloc (sizeof(nodo)); /* reserva espacio para un nodo */ La primera vez inicio = ptr; Podemos acceder a un campo de la estructura así: ptr -> inf = 100; ptr -> sig = NULL; ¿Cómo hacer para ir añadiendo nodos a la lista? ... escriba el código necesario. Ejemplos de uso de la función malloc #include <stdio.h> #include <stdlib.h> void main() { int *pint; float *preal; char *pcar; typedef struct{ int num; char nombre[10]; } estructura; estructura *pestr; // apuntador a tipo estructura struct datos{ //estructura que incluye un puntero int num; char nombre[10]; struct datos *liga; }; typedef struct datos nodo; nodo *nuevo; // crea área de memoria para un entero pint = (int *)malloc (sizeof(int)); scanf ("%d", pint); printf ("%dn", *pint); pcar = (char *)malloc(sizeof(char)); *pcar = 'a'; printf("%cn",*pcar); preal = (float *)malloc(sizeof(float)); scanf ("%f",preal); printf("%fn",*preal); // crea área para un tipo estructura pestr = (estructura *)malloc(sizeof(estructura)); scanf ("%d",&pestr->num); printf("%dn",pestr->num); scanf ("%s",pestr->nombre); printf("%sn",pestr->nombre); nuevo = (nodo *)malloc(sizeof(nodo)); scanf ("%d",&nuevo->num); printf("%dn",nuevo->num); scanf ("%s",nuevo->nombre); printf("%sn",nuevo->nombre); nuevo ->liga = NULL; printf ("n fin"); }