Dise - PowerPoint PPT Presentation

1 / 33
About This Presentation
Title:

Dise

Description:

El car cter & delante de una variable indica que lo se est ... ABC: a es por anon o pastel alfabeto del cual todos tienen parte. For(p=q;*q!=''; q) ... – PowerPoint PPT presentation

Number of Views:29
Avg rating:3.0/5.0
Slides: 34
Provided by: face2
Category:
Tags: abc | com | dise | www | x10

less

Transcript and Presenter's Notes

Title: Dise


1
Diseño de algoritmosPunteros
Claudio Gutiérrez-Soto.
2
Punteros
  • Un puntero es una variable que hace referencia a
    una dirección de memoria
  • Sintaxis
  • Tipo_Dato nombre_variable_puntero
  • Ejemplo
  • int p
  • Asignación de Dirección
  • nombre_punterovariable

3
Punteros
  • El carácter delante de una variable indica que
    lo se está accediendo es a la dirección de
    memoria de dicha variable.
  • Ejemplo
  • int p
  • p0 / p posee la dirección NULL
    ó 0/
  • pNULL / p posee la dirección NULL ó
    0/
  • pi /p apunta hacia i ó
    conteniendo la dirección de i /
  • p(int )1501 /dirección absoluta de
    memoria /

4
Punteros
" Si p es un puntero, entonces p es el valor de
la variable a la que apunta . Ejemplo double
x,y,p px yp Lo anterior es
equivalente a yx yx

5
Punteros
Inicialización Sintaxis tipo_dato
nombre_punterovariable Ejemplo int i7,pi

6
Punteros
  • Construcciones a las que no se debe apuntar.
  • No apuntar a constantes.
  • 3 / ilicito/
  • No apuntar a arreglos, el nombre de un arreglo
    es una constante
  • int a77
  • a
  • No apuntar a expresiones ordinarias
  • (k99)

7
Punteros
No apuntar a variables de tipo register.
register v v Si a es un arreglo,
expresiones como a0 y aij3 adquieren
sentido

8
Punteros
int i3, j5, k,pi, q5,r double x11.5

9
Punteros

10
Punteros
  • Llamada por valor
  • Máx(a,b)
  • Int a,b
  • return((agtb)?ab)
  • Llamado por referencia
  • Máx(a,b,m_ptr)
  • Int a, b,m_ptr
  • m_ptr(agtb)?ab

11
Punteros
Relación entre punteros y arreglos. Un
puntero es una variable cuyos valores son
direcciones. El nombre de un arreglo es una
dirección o puntero fijo. Cuando se declara un
arreglo, el compilador debe asignar una dirección
base y la cantidad de almacenamiento suficiente
como para alojar a todos los elementos del
arreglo.

12
Punteros
define TAM 100 int aTAM, p y el
sistema hece que los bytes numerados 300, 304,
309,......696 sean las direcciones de a0,
a1, a2,...,a99. pa pa0

13
Punteros
Aritmética de punteros La aritmética de
puntero proporciona una opción para la indización
de arreglos, las proposiciones pa1 pa1
Sumar un arreglo suma0 for(pa
pltaTAMp) sumap

14
Punteros
suma0 for(i0iltTAMi) suma(ai) Debid
o a que a es un puntero constante, las
expresiones como ap a a2 Son
ilícitas, no se puede cambiar la dirección de
a. Expresiones apuntadoras como p1, p y pi
son válidas. Double a doublea

15
Punteros
Cadenas Las cadenas son arreglos
unidimensionales de tipo char, Por convención,
una cadena en C se termina con centinela de fin
de cadena ó carácter nulo \0. char s
"ABC" char p"a es por anon o pastel
alfabeto" void main() char q"del cual
todos tienen parte" printf("\ns,s\n
s",s,p,q) ABC a es por anon o pastel
alfabeto del cual todos tienen
parte. For(pqq!'\0'q) q1 printf(
"\n s\n\n",p)

16
Punteros
Arreglos multidimensionales Expresiones
equivalentes abii (bij) ((bi))j ((
(bi))J) (b005ij) Al definir la
función, en el encabezamiento, la
declaración Int (v)5 int v 5 Int
c792 Cijk (c00092i2j
k)

17
Asignación dinámica de memoria
  • Cuando definimos un arreglo con un tamaño
    definido, podemos tener dos posibles casos, uno
    es un desaprovechamiento de la memoria y otro es
    la falta de espacio, lo cual en general no sucede.

18
Asignación dinámica de memoria
  • Por ende, podría ser posible definir
  • int x
  • En lugar de
  • int x10
  • No obstante, si no conocemos el tamaño de manera
    predeterminada, es posible asignar espacio de
    manera dinámica.

19
Asignación dinámica de memoria
  • Así para asignar memoria de manera dinámica
    podemos utilizar la función malloc, como sigue
  • x (int )malloc(10sizeof(int))
  • Esta función reserva un bloque de memoria cuyo
    tamaño (en bytes) es equivalente a 10 cantidades
    enteras.

20
Asignación dinámica de memoria
  • En general el ltltcastgtgt de tipo que procede a
    malloc debe ser consistente con el tipo de datos
    de la variable puntero.
  • Así si quisiéramos pedir en tiempo de ejecución
    para una variable tipo double sería
  • y(double )malloc(10sizeof(double))

21
Asignación dinámica de memoria
  • int i,n,x
  • .
  • printf(Cuántos números serán ingresados\)
  • scanf(d,n)
  • / reserva de memoria para n /
  • x(int )malloc(nsizeof(int))
  • for(i0iltni)
  • printf( id x, i1)
  • scanf(d,xi)

22
Uso de typedef en estructuras
  • Recordemos que la palabra reservada typedef nos
    permite redefinir un tipo de dato, por ejemplo
  • typedef int entero
  • Es posible definir tipos de datos con la nueva
    definición
  • entero a,b,c

23
Uso de typedef en estructuras
  • Por ello, en términos generales se puede definir.
  • typedef struct
  • miembro 1
  • miembro 2
  • miembro 3
  • .
  • nuevo-tipo

24
Uso de typedef en estructuras
  • typedef struct
  • int mes
  • int dia
  • int anho
  • fecha
  • fecha Aux

25
Estructuras y punteros
  • Podemos acceder a la dirección de una variable
    estructura de la misma manera que cualquier otra
    dirección, mediante el uso del operador (). Así
    podemos escribir
  • tipo ptvar

26
Estructuras y punteros
  • Ejemplo
  • typedef struct
  • int no_cuenta
  • char tipo_cuenta
  • char nombre80
  • float saldo
  • cuenta
  • cuenta cliente, pc

27
Estructuras y punteros
  • En este ejemplo cliente es una variable
    estructura de tipo cuenta y pc un puntero que
    apunta a una variable de tipo cuenta.
  • Por ende
  • pccliente
  • Así podemos acceder a un miembro individual de
    una estructura en términos de su correspondiente
    variable puntero escribiendo
  • Ptvar-gtmiembro
  • Lo que es equivalente a escribir
  • variable.miembro

28
Estructuras y punteros
  • El operador -gt puede combinarse con el operador
    punto para acceder a un submiembro dentro de una
    estructura. Por lo tanto, un submiembro puede ser
    accedido escribiendo
  • ptvar-gtmiembro.submiembro

29
Estructuras y punteros
  • struct Cuenta
  • int no_cuenta
  • char tipo_cuenta
  • char nombre80
  • float saldo
  • fecha ultimopago
  • cliente,pccliente
  • cliente.no_cuenta, pc-gtno_cuenta,
  • (pc).no_cuenta

typedef struct int mes int dia int
anio fecha
30
Estructuras y punteros
  • struct Cuenta
  • int no_cuenta
  • char tipo_cuenta
  • char nombre80
  • float saldo
  • fecha ultimopago
  • cliente,pccliente
  • cliente.ultimopago.mes, pc-gtultimopago.mes,
  • (pc).ultimopago.mes

typedef struct int mes int dia int
anio fecha
31
Estructuras y punteros
  • struct Cuenta
  • int no_cuenta
  • char tipo_cuenta
  • char nombre80
  • float saldo
  • fecha ultimopago
  • cliente,pccliente

typedef struct int mes int dia int
anio fecha
Para acceder al tercer carácter del nombre, este
puede ser accedido de la siguiente manera
cliente.nombre2 pc-gtnombre2
(pc).nombre2
32
Ejemplo
  • cliente.no_cuentan
  • cliente.tipo_cuentat
  • cliente.nombreLázaro
  • cliente.saldob
  • printf(d c s .2f,cliente.no_cuenta,cliente
    .tipo_cuenta, cliente.nombre,cliente.saldo)
  • printf(d c s .2f \n,pc-gtno_cuenta,pc-gttipo
    _cuenta, pc-gtnombre,pc-gtsaldo)
  • 3333 A Lázaro 99.99
  • 3333 A Lázaro 99.99

main() int n3333 char tA float
b99.99 typedef struct int mes int
dia int anio fecha struct Cuenta int
no_cuenta char tipo_cuenta char
nombre float saldo fecha ultimopago
cliente,pccliente
33
Preguntas?
Write a Comment
User Comments (0)
About PowerShow.com