SlideShare uma empresa Scribd logo
1 de 4
Baixar para ler offline
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");
}

Mais conteúdo relacionado

Mais procurados

1.1 tipos de datos abstractos
1.1 tipos de datos abstractos1.1 tipos de datos abstractos
1.1 tipos de datos abstractoserwin_alexander
 
CONTADOR BINARIO ASCENDENTE DE 8 BITS CON ARDUINO
CONTADOR BINARIO ASCENDENTE DE 8 BITS CON ARDUINOCONTADOR BINARIO ASCENDENTE DE 8 BITS CON ARDUINO
CONTADOR BINARIO ASCENDENTE DE 8 BITS CON ARDUINOFernando Marcos Marcos
 
Almacenamiento binario
Almacenamiento binarioAlmacenamiento binario
Almacenamiento binarioVIDUCOUNEFA
 
02.Arquitectura de los microcontroladores pic
02.Arquitectura de los microcontroladores pic02.Arquitectura de los microcontroladores pic
02.Arquitectura de los microcontroladores picJonathan Ruiz de Garibay
 
Arquitectura de memorias RAM, ROM,CACHE 2
Arquitectura de memorias  RAM, ROM,CACHE 2Arquitectura de memorias  RAM, ROM,CACHE 2
Arquitectura de memorias RAM, ROM,CACHE 2YESENIA CETINA
 
Sumador de 4 bits
Sumador de 4 bitsSumador de 4 bits
Sumador de 4 bitsAbril Bello
 
Circuitos integrados digitales
Circuitos integrados digitalesCircuitos integrados digitales
Circuitos integrados digitalesOmar Serrano
 
Tecnología ethernet
Tecnología ethernetTecnología ethernet
Tecnología ethernetmi house
 
CONFIGURACIÓN DE REDES IPv6
CONFIGURACIÓN DE REDES IPv6CONFIGURACIÓN DE REDES IPv6
CONFIGURACIÓN DE REDES IPv6Jhoni Guerrero
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++die_dex
 
PROCESO E/S O SISITEMAS DE E/S
PROCESO  E/S O  SISITEMAS DE E/SPROCESO  E/S O  SISITEMAS DE E/S
PROCESO E/S O SISITEMAS DE E/SUDEC
 
Estructura de la computadora portatil
Estructura de la computadora portatilEstructura de la computadora portatil
Estructura de la computadora portatilFatima Ziga
 

Mais procurados (20)

1.1 tipos de datos abstractos
1.1 tipos de datos abstractos1.1 tipos de datos abstractos
1.1 tipos de datos abstractos
 
Ciclo de instrucción
Ciclo de instrucciónCiclo de instrucción
Ciclo de instrucción
 
Manejo de archivos en c#
Manejo de archivos en c#Manejo de archivos en c#
Manejo de archivos en c#
 
Punteros y Arreglos
Punteros y ArreglosPunteros y Arreglos
Punteros y Arreglos
 
CONTADOR BINARIO ASCENDENTE DE 8 BITS CON ARDUINO
CONTADOR BINARIO ASCENDENTE DE 8 BITS CON ARDUINOCONTADOR BINARIO ASCENDENTE DE 8 BITS CON ARDUINO
CONTADOR BINARIO ASCENDENTE DE 8 BITS CON ARDUINO
 
Almacenamiento binario
Almacenamiento binarioAlmacenamiento binario
Almacenamiento binario
 
02.Arquitectura de los microcontroladores pic
02.Arquitectura de los microcontroladores pic02.Arquitectura de los microcontroladores pic
02.Arquitectura de los microcontroladores pic
 
Arquitectura de memorias RAM, ROM,CACHE 2
Arquitectura de memorias  RAM, ROM,CACHE 2Arquitectura de memorias  RAM, ROM,CACHE 2
Arquitectura de memorias RAM, ROM,CACHE 2
 
El PIC16F84
El PIC16F84El PIC16F84
El PIC16F84
 
Conector rs 485
Conector rs 485Conector rs 485
Conector rs 485
 
Uart
UartUart
Uart
 
Matrices pseint
Matrices   pseintMatrices   pseint
Matrices pseint
 
Sumador de 4 bits
Sumador de 4 bitsSumador de 4 bits
Sumador de 4 bits
 
Circuitos integrados digitales
Circuitos integrados digitalesCircuitos integrados digitales
Circuitos integrados digitales
 
Tecnología ethernet
Tecnología ethernetTecnología ethernet
Tecnología ethernet
 
CONFIGURACIÓN DE REDES IPv6
CONFIGURACIÓN DE REDES IPv6CONFIGURACIÓN DE REDES IPv6
CONFIGURACIÓN DE REDES IPv6
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++
 
PROCESO E/S O SISITEMAS DE E/S
PROCESO  E/S O  SISITEMAS DE E/SPROCESO  E/S O  SISITEMAS DE E/S
PROCESO E/S O SISITEMAS DE E/S
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Estructura de la computadora portatil
Estructura de la computadora portatilEstructura de la computadora portatil
Estructura de la computadora portatil
 

Destaque

Destaque (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++
 

Semelhante a 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
 
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
 
Clase 10_ programacion
Clase 10_ programacionClase 10_ programacion
Clase 10_ programaciondiego MC
 

Semelhante a 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
 
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
 
Clase 10_ programacion
Clase 10_ programacionClase 10_ programacion
Clase 10_ programacion
 

Mais 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
 

Mais 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
 

Último

Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesMarisolMartinez707897
 
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfPlan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfcarolinamartinezsev
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfUPTAIDELTACHIRA
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Juan Martín Martín
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primariaWilian24
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxNadiaMartnez11
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfJonathanCovena1
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...jlorentemartos
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxFernando Solis
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxiemerc2024
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfGruberACaraballo
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOluismii249
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxpvtablets2023
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfMercedes Gonzalez
 
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCTRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCCarlosEduardoSosa2
 

Último (20)

Power Point E. S.: Los dos testigos.pptx
Power Point E. S.: Los dos testigos.pptxPower Point E. S.: Los dos testigos.pptx
Power Point E. S.: Los dos testigos.pptx
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdfPlan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
Plan-de-la-Patria-2019-2025- TERCER PLAN SOCIALISTA DE LA NACIÓN.pdf
 
Usos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicasUsos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicas
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
Factores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdfFactores que intervienen en la Administración por Valores.pdf
Factores que intervienen en la Administración por Valores.pdf
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
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
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
 
Tema 11. Dinámica de la hidrosfera 2024
Tema 11.  Dinámica de la hidrosfera 2024Tema 11.  Dinámica de la hidrosfera 2024
Tema 11. Dinámica de la hidrosfera 2024
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCTRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
 

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"); }