Punteros y Arreglos.

Download Report

Transcript Punteros y Arreglos.

Programación, Algoritmos y Estructuras de Datos.
Introducción teórica al Trabajo Práctico 4.
Tema: Punteros y Arreglos.
Tipos de Datos Básicos y Estructurados
Datos Básicos
Enteros
Reales
Caracteres
Numéricos
Puntero
Datos Derivados
Internos
Datos Estructurados
Externos
Primer cuatrimestre de 2011
Estáticos
Arreglos
Dinámicos
Listas, Pila, Cola
Árbol.
Ficheros
Pablo A. García
Programación, Algoritmos y Estructuras de Datos.
Introducción teórica al Trabajo Práctico 4.
Tema: Punteros y Arreglos.
Tipos de Datos Básicos y Estructurados
Datos Básicos
Enteros
Reales
Caracteres
Numéricos
Puntero
Datos Derivados
Internos
Datos Estructurados
Externos
Primer cuatrimestre de 2011
Estáticos
Arreglos
Dinámicos
Listas, Pila, Cola
Árbol.
Ficheros
Pablo A. García
Programación, Algoritmos y Estructuras de Datos.
Introducción teórica al Trabajo Práctico 4.
Tema: Punteros y Arreglos.
Punteros
Introducción: el puntero es una de las características más poderosas del lenguaje de
programación C y también una de las capacidades más difíciles de dominar. Los punteros
nos permiten simular llamadas por referencia, crear y manipular estructuras de datos.
Definición: (según Deitel y Deitel)
Los punteros son variables que contienen direcciones de memoria como sus valores. Por lo
general una variable contiene directamente un valor específico. Un puntero contiene la
dirección de una variable que contiene un valor específico. En este sentido, un nombre de
variable se refiere “directamente” a un valor y un puntero se refiere “indirectamente” a
un valor.
Primer cuatrimestre de 2011
Pablo A. García
Programación, Algoritmos y Estructuras de Datos.
Introducción teórica al Trabajo Práctico 4.
Tema: Punteros y Arreglos.
Declaración:
int * ptr;
int a;
a=7;
ptr=&a;
ptr
a
& es un operador que regresa
la dirección de su operando.
7
Un puntero puede ser inicializado a 0, NULL o a una dirección. Un apuntador con valor NULL
no apunta a nada. Ponerlo a 0 es igual a NULL, pero se prefiere NULL.
La representación del puntero en memoria sería:
ptr
0xFF0A
0xFF8C
0xFF0A
a
7
El operador * se conoce como “el operador de indirección o de desreferencia”, y nos retorna
El valor del objeto hacia el cual su operando apunta. Por ejemplo:
printf(“%d”, *ptr);
/* Imprime el valor de la variable a, es decir, 7 */
Primer cuatrimestre de 2011
Pablo A. García
Programación, Algoritmos y Estructuras de Datos.
Introducción teórica al Trabajo Práctico 4.
Tema: Punteros y Arreglos.
El especificador de formato %p dentro del printf extrae la dirección de memoria en formato
Hexadecimal.
Ejercicio ejemplificador (Problema 1 práctica 4):
j
#include <stdio.h>
int j, k;
0x4080
1
int *ptr;
0x40C0
int main(void)
k
{
0x40A0
2
j = 1;
k = 2;
ptr = &k;
printf("\n");
printf("j tiene el valor %d y está almacenado en %p\n",j,&j);
printf("k tiene el valor %d y está almacenado en %p\n",k,&k);
printf("ptr tiene el valor %p y está almacenado en %p\n",ptr,&ptr);
printf("El valor del entero al que apunta ptr es %d\n", *ptr);
return 0;
}
Primer cuatrimestre de 2011
ptr
0x40A0
Pablo A. García
Programación, Algoritmos y Estructuras de Datos.
Introducción teórica al Trabajo Práctico 4.
Tema: Punteros y Arreglos.
Arreglos
Introducción: Los arreglos sirven como una introducción al tema de las estructuras de datos.
Los arreglos o arrays son estructuras de datos formadas por elementos del mismo tipo. Una
estructura de datos está formada por elementos relacionados por el mismo nombre pero de
distintos tipos. Los arreglos y las estructuras son entidades estáticas debido a que conservan
su tamaño durante la ejecución del programa. También existen las estructuras dinámicas de
datos como son las listas, colas o pilas, que pueden crecer o encogerse durante la ejecución
del programa [Deitel y Deitel].
ARREGLOS UNIDIMENSIONALES
Definición: Colección de datos del mismo tipo que se referencian por un mismo nombre y que son
almacenados en posiciones de memoria contiguas, donde la posición de memoria más baja corresponde
al primer elemento o componente del arreglo.
Los tipos de elementos almacenados en el arreglo pueden ser cualquier tipo de dato de C.
Ejemplos de arreglos:
•Un listado telefónico.
•la edad de los alumnos de una clase
•las temperaturas de cada día de un mes de una ciudad, etc.
Primer cuatrimestre de 2011
Pablo A. García
Programación, Algoritmos y Estructuras de Datos.
Introducción teórica al Trabajo Práctico 4.
Tema: Punteros y Arreglos.
Como declarar los arreglos: Los arreglos ocupan espacio en memoria. El programador
especifica el tipo de cada elemento y el número de elementos para cada arreglo para que
la PC pueda reservar la memoria necesaria. Para indicarle a la PC que reserve 6 elementos
para el arreglo entero C hacemos:
int c[6];
Otros arreglos pueden ser: char b[10]; o float a[1000];
C[0]
-45
C[1]
6
C[2]
0
C[3]
72
C[4]
1543
C[5]
-89
C: Nombre del arreglo.
El número de posición que aparece dentro de los corchetes
Se conoce como “subíndice del arreglo”.
El subíndice puede ser un entero o una expresión entera:
C[0]=-45;
C[2]=0;
C[a+b]+=2; /* C[4]= C[4]+2; C[4]=1545; */
Posición numérica del
elemento dentro del arreglo
Primer cuatrimestre de 2011
Por ejemplo: para imprimir la suma de los 3 primeros
elementos del arreglo hacemos:
printf( “%d”, C[0]+C[1]+C[2] );
Pablo A. García
Programación, Algoritmos y Estructuras de Datos.
Introducción teórica al Trabajo Práctico 4.
Tema: Punteros y Arreglos.
Ejemplo integrador usando un arreglo: en el siguiente programa usamos una estructura de
repetición “for” para inicializar un arreglo de enteros con los primeros 10 números impares,
e imprimimos el arreglo en forma tabular.
/*Inicializamos el arreglo*/
#include<stdio.h>
main()
{
int arreglo[10],i;
for(i=0;i<=9;i++)
arreglo[i]=2*i+1;
printf("%s%10s\n","Subindice","Valor");
for(i=0;i<=9;i++)
printf("%9d%10d\n",i,arreglo[i]);
getchar();
return 0;
}
Primer cuatrimestre de 2011
Pablo A. García