Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Apuntadores

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 60

• Arreglos

– Definición de arreglos unidimensionales y


bidimensionales.
– Recorridos de arreglos
– Ejercicios
• Apuntadores
– Declaración de apuntadores
– Declaración de listas enlazadas
– Ejercicios
• La estructura en un programa en C es de la
siguiente forma:
#include <stdio.h> Declaración librerías
Declaración de Macros
#define MAXIMO 100
Int funcion1(char vector[], int max) Declaración de funciones
Int funcion2()

int main(void) /*Cabecera de funcion*/ Programa principal


{
int caracter; /*Declaracion de variable local*/
for (caracter = 33 ; caracter < 255 ; caracter++)
/*Define ciclo de 33 a 255*/
putchar(caracter); Bloque programa
/*Imprime caracter segun numero*/
putchar('\n');
return 0;
} /*fin de main()*/
• Las librerías son declaradas en archivos llamados de cabezera
“Headerfiles”, estas sellaman:#include <stdio.h>
• Laslocalessellaman#include |pantalla.h|
stdio.h - Funciones de entrada/salida
stdlib.h - Conversión de tipos y asignación de memoria
string.h - Manejo de cadenas de caracteres
ctype.h - Comprobaciones y conversiones de tipos
io.h - Control de disco a bajo nivel
math.h - Funciones matemáticas en punto flotante
dos.h - Interacción con el MS-DOS
dir.h - Búsqueda de ficheros y manejo de directorios
• Hay cuatro tipos de datos fundamentales, identificados
por la palabra clave que los define en el lenguaje:
• int: números enteros.
• char: un caracter individual.
• float: números fraccionarios, en notacion de coma flotante.
• double: números en coma flotante, con el doble de digitos
significativos que los float.

• Existe también una serie de modificadores que


alteran el rango de valores aceptados por los tipos
base:
• short int, o simplemente short: numeros enteros con menor rango de
valores.
• long int, o tambien long: numeros enteros con mayor rango de
valores.
• unsigned int, o simplemente unsigned: numeros enteros sin signo.
• unsigned long: enteros grandes y sin signo.
• unsigned char: esto es util cuando usemos una variable char como
si fuese un int.
Ejemplos
• unsigned x;
• int x,y;
• char letra = 'A';
• unsigned long valor_largo;
• double pi = 3.1416;
• float num_1, num_2, num_3;
Tipoy funciones

• int convertir(char letra_1, char letra_2)


• double raiz_cuadrada(double operando)
• void escribir(char letra)
• unsigned long espacio_libre(void)
Llamar funciones
escribir('X');

resultado = raiz_cuadrada(x);

espacio = espacio_libre() + 512;


valor = raiz_cuadrada(convertir('z', caracter_2));

if (es_primo(x))

return raiz_cuadrada(x * y);


Comparaciones
< menor que
> mayor que
<= menor o igual
>= mayor o igual
== igual
!= distinto
Ejemplos
a > b
a == 3
10 > dato
valor >= 0
if (a == b) printf("a es igual que b");
inicial = 65
Entrada
• La lectura de datos se realiza con las
sentencias:
scanf(“%d”, &edad)
scanf(“%d %c %f”, &a,&c,&x);
caracter = getc(variable);
c = getchar()
Salida
• La salida de datos se realiza con las
sentencias:
putchar(33);
putchar(variable);
putchar(100);
printf ("hola\n");
printf("Tienes %d edad\n", edad);
printf("Tienes %d edad y mides %f\n", edad, altura);
Arreglos
• Al declarar el array, indicamos entre
corchetes el número de elementos que
va a tener.
int mi_array[10];
mi_array=valor_leido;
Declaración y acceso a Arreglos Unidimensionales

Tipo

int edad[5]

Identificador Tamaño
Declaración y acceso a Arreglos Unidimensionales
Declaración y acceso a Arreglos Unidimensionales
Declaración y acceso a Arreglos Unidimensionales

Elementos

Indices
Nombre del arreglo
Declaración y acceso a Arreglos Unidimensionales
Ejercicio 2
Programa en C que permite ingresar una matriz de
orden 3x3 desde la consola y almacenarlo en un
arreglo bidimensional, luego presentar sus
elementos
DEFINICION
COLUMNAS

FILAS
Ejercicio 3
programa en C que permita ingresar una matriz de
orden 3x3, almacenarlo en un arreglo. Todos los
elementos que se encuentran bajo la diagonal
principal almacenarlos en un arreglo unidimensional
y sumarlos
3 2 5
4 6 6
7 8 9
a
3 2 5
4 6 6
7 8 9
3 2 5
4 6 6
7 8 9
Apuntadores
Concepto:
“Un puntero es un tipo de dato simple que
contiene la dirección de una variable o
estructura”

Al declarar un puntero se asocian 3


atributos: nombre, tipo y dirección en
memoria.
 Cada vez que se declara una variable en algún
lenguaje de programación (por ejemplo C++), el
compilador establece un área de memoria para
almacenar el contenido de una variable.
 El espacio para esa variable se sitúa en una
posición específica de la memoria, conocida
como “dirección de memoria”
 Cuando se referencia o hace uso de la variable, el
compilador de C++ accede automáticamente a la
dirección de memoria asignada a dicha variable
 Se puede ganar en eficacia en el acceso a esta de
memoria utilizando un puntero o apuntador.
Reglas básicas
 Un puntero es una variable como cualquier otra
 Un apuntador o puntero contiene una dirección
que apunta a otra posición en memoria
 En esa posición se almacenan los datos a
los que apunta el puntero
 Un apuntador o puntero “apunta” a una
dirección de memoria
• Un apuntador es una variable que
contiene la dirección de otravariable.

Apuntador Variable
dirección valor

Se puede acceder al objeto


“indirectamente”
• Operador unitario &: da la dirección del
objeto p=&c
• Se asigna la dirección de ca la variable p
• p es el puntero

• Operador unitario *: es el operador de


indirección o desreferencia; da acceso
a objeto que señala el apuntador
Ejemplos:
int *px; \*declara a px como un puntero a un objeto integer*\
char *px; \*declara a px como un puntero a un objeto char*\
int x,y,*px;
px=&x; \*asigna la dirección de x a la variable px*\

y=*px; \*asigna a y el valor al que apunta px*\


Ejemplo:
#include <iostream>

using namespace s t d ;

i n t main(){
i n t n = 75;
i n t *p = &n; / / c o n t i e n e l a dirección de l a v a r i a b l e n

cout << "n = " << n << " ,&n = " << &n << " , p = " << p << e n d l ;
cout << "&p = " << &p << e n d l ;
system("pause");

return 0;
}
Análisis del ejemplo
La variable “p” se denomina “puntero” debido a
que si valor “apunta” a la posición de otra
variable.
Es un puntero “int” cuando el valor al que apunta
es de tipo “int” como el del ejemplo anterior
Declaración de apuntadores
<tipo_de_dato_apuntador> *<nombre_apuntador>;

ejemplos:

int *ptr1; //apuntador a tipo de dato entero (int)


long *ptr2;
char *ptr3;
float *f;
--Siempre que aparezca un * en la declaración de una
variable, ésta es una variable apuntador--
Inicialización de punteros
 La inicialización de un apuntador proporciona
a ese apuntador la dirección del dato
correspondiente.
 Después de la inicialización se puede utilizar el
puntero para diferenciar los datos
direccionados. (Es como si te dieran una
dirección de un domicilio y además te dieran la
llave para entrar a ver qué hay en dicho
domicilio)
 Asignar un valor a la dirección de memoria:

*p = 50;
Inicialización del apuntador
 Cuando ya se ha definido un apuntador, el
asterisco adelante de la variable apuntador
indica “el contenido” de la memoria apuntada
por el apuntador y será del tipo dado.
 Este tipo de inicialización es estática, ya que
la asignación de memoria utilizada para
almacenar el valor es fijo y no puede
desaparecer.
 Una vez que la variable se define, el
compilador establece suficiente memoria para
almacenar un valor del tipo de dato dado.
 La memoria permanece reservada para esta
variable y no se puede utilizar para otra cosa
durante la ejecución del programa (no se
puede liberar la memoria reservada para una
variable)

 Existe un segundo método para inicializar un


apuntador, mediante la asignación dinámica
de memoria. Este método utiliza operadores
new y delete, y lo veremos más adelante.
Indirección de apuntadores
 Después de definir una variable apuntador, el
siguiente paso es inicializar el puntero y
utilizarlo para direccionar algún dato
específico en memoria.
 El uso de un puntero para obtener el valor al
que apunta, es decir, su dato apuntado, se
denomina “indirección del puntero”
 Para ello se utiliza el operador de indirección
*
Indirección (continuación)
Ejemplo de crear, inicializar e
indireccionar un apuntador
#include <iostream>

using namespace s t d ;

char c ; / / v a r i a b l e caract er

i n t main(){
char * p c ; //apuntador a una v a r i a b l e caracter

pc = &c;
f o r ( c = ' A ' ; c <= ' Z ' ; c++)
cout << *pc <<endl;
system("pause");
re1t6urn 0
 La ejecución de este programa visualiza
el alfabeto.
 La variable puntero pc es un apuntador a
una variable carácter.
 La línea pc = &c; asigna a pc la dirección
de la variable c (&c)
 El bucle for almacena en c las letras del
alfabeto y la sentencia cout << *pc; visualiza el
contenido de la variable aputada por pc.
 c y pc se refieren a la misma posición en
memoria, de modo que el cambio de una
variable debe afectar a la otra.
• Operaciones permitidas
– Unapuntador puedeserasignadoaotro
– Es posiblesumarorestarunapuntador conunentero
– Es posiblerestarocomparardos apuntadores
– Noesposiblerealizarningunaoperación entredos
apuntadores
Declarar punteros

p 10
1638212
Declarar punteros - ejercicio

n
p 10
Listas enlazadas
Una lista enlazada es una colección o
secuencia de elementos dispuestos uno
detrás de otro, en la que cada elemento se
conecta al siguiente elemento mediante un
“enlace”.

Nodo Nodo Nodo


puntero puntero
Listas enlazadas

Puntero

1245874
Ejemplo – Declaración de una lista enlazada
Ejemplo – Enlazar nodos
Reservar memoria

Asignación a campos

sizeof : Tamaño de cada nodo de la lista


malloc(): puntero genérico(void). Se convierte a Nodo
Ejemplo – Declaración de una lista enlazada
Ejemplo – Declaración de una lista enlazada

n
1638212 10 NULL
Insertar elementos en unalista
• En la cabeza
• Al final de la lista
• En la lista
– Antes de un elemento especificado
– Después de un elemento especificad.
Ejercicio 4
• Programa que permite crear una lista enlazada de
elementos que almacenen datos de tipo entero.
Luego presentar los elementos de la lista enlazada.

5 3 5 null

Declaración estructura
5 3 8
Insertar en la cabeza de unalista
Lista enlazada
12 16 4 NULL

cabeza

3
nuevo

Nuevo -> siguiente = cabeza


12 16 4 NULL

cabeza

3
nuevo
Insertar en la cabeza de unalista
cabeza = nuevo

cabeza 3 12 16 4 NULL

nuevo

Elemento insertado

3 12 16 4 NULL

cabeza

También podría gustarte