1 / 18

Índice.

Índice. Revisando conceptos acerca de la memoria. Las variables en los programas. Punteros y direcciones. Aritmética de punteros. Estructuras y Uniones. Extendiendo los conceptos a funciones. Memoria. La memoria es un conjunto de celdas contiguas donde se almacenan datos.

Télécharger la présentation

Índice.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Índice. • Revisando conceptos acerca de la memoria. • Las variables en los programas. • Punteros y direcciones. • Aritmética de punteros. • Estructuras y Uniones. • Extendiendo los conceptos a funciones.

  2. Memoria. • La memoria es un conjunto de celdas contiguas donde se almacenan datos. • La unidad de memoria más pequeña es el bit. • El byte es un conjunto de 8 bits. Unidad de memoria. • El lugar (ubicación) de cada byte es único y es su dirección. • Si los bytes son consecutivos la dirección se ira incrementando secuencialmente. • Cada celda tiene dos valores asociados: Dirección y Contenido.

  3. Variables • Una variable es una porción de memoria identificada por un nombre. • El tipo de dato define su representación binaria y longitud. • Tiene tres valores asociados: Nombre, Contenido y Dirección. • Declaramos: “int n=1523, m=121;” • Contenido: • n  1523 • m  121 • Dirección: • &n C102 • &m  C100 • Es contenido binario se codifica (bits) de acuerdo al tipo de variable.

  4. Tipos de Variables • El tipo de variable establece: • Rango de valores que maneja. • Codificación binaria del dato. • Cantidad de memoria requerida. • En todos los casos la dirección de almacenaje es “&variable”.

  5. Punteros • Un puntero es una variable cuyo contenido es una dirección. • Como todas las variable tiene nombre, contenido y dirección. • Un puntero “apunta a”: un dato, un array, un objeto, una función, etc. • “int n;” declara una variable entera (16 bits / 2 bytes) • “int *j;” declara un puntero tipo entero (solo almacena direcciones). • “j” contiene una dirección donde comienza un entero. • “*j” valor entero almacenado en la dirección apuntada por “j” (indirección). • n contenido=“valor del entero” j contenido=“valor de la dirección”. • &n  dirección del entero en “n” *j contenido en la dirección de “j”. Representamos “int n=40, *j=&n;” suponemos que se almacenan: n en la dirección 0xA010 y j en la dirección 0xF234 Lugar: 2 byte donde esta almacenado n Lugar: 2 byte donde esta almacenadoj

  6. Algebra de punteros • Los punteros se usan como cualquier otra variable. • Su comportamiento es de acuerdo al tipo definido. • “long n[ ]={40,30,20,10}, *j=n;” • j se inicializa con &n[0] • j  &n[0]  0xA010  *j =40 • j++  &n[1]  0xA014  *j =30 • j+2  &n[3]  0xA01C  *j =10 • Si hacemos j=n; *(j+2)  n[2]  20 • Valor apuntado por j más 2 posiciones • Como j es tipo long incrementará 8 (4*2) bytes • El incremento depende del tipo. • j Tiene un lugar de memoria para su contenido. • j esta almacenada en &j, ocupa 8/16/32/64 bits de acuerdo al micro.

  7. Punteros de Punteros • Un puntero puede almacenar una dirección de otro puntero. • El valor final apuntado puede obtenerse en forma directa. • “int n, *j, **p”; hacemos “n=4562”; “j=&n”; “p=&j”; • Supongamos que: • &n 0x3021 • &j  0x4310 Entonces: • &p 0x4F02 • Interpretación: • Con el valor de p obtiene la dirección de j: *p &j • Con el valor de j obtiene la dirección de n: *j &n • Con el tipo de p interpreta el valor de n. • Esta es la secuencia de  **p p  0x4310 *p  j  0x3021 **p  *j  4562 *(*(p))  4562 *( j )  4562 n  4562

  8. Punteros de Punteros Representación gráfica de doble indirección Lugar: 2 byte donde esta almacenadop Lugar: 2 byte donde esta almacenado j Lugar: 2 byte donde esta almacenado n

  9. Uso de Punteros • Ejemplo de un código, asignación y uso de punteros. A p se le asigno la dirección 0x14E A j se le asigno la dirección 0x130 A a1 se le asigno la dirección 0x1902 Compilador C (CodeWarrior)

  10. Uso de Punteros • Como obtiene el valor de **p. Toma la dirección de p 0x14E Compilador C (CodeWarrior)

  11. Uso de Punteros • Sumemos “p += 2;”. El valor de **p queda. Toma la dirección de p 0x14E Compilador C (CodeWarrior)

  12. Introducción a Estructuras • Cuando definimos arreglos agrupamos datos del mismo tipo. • “int dni[40], *pv=dni;” • Asignará 40 * 2 = 80 bytes contiguos para almacenar los 40 enteros • Con pv puedo navegar sobre el arreglo (array). • Si necesito asociar varios tipos de datos de una misma entidad (Registro) • Ejemplo: Registro de exámenes de un turno: • Acta, Fecha, Materia, Legajo, Nombre, Nota. • Necesito 6 arreglos para los siete tipos de datos. • Cada arreglo esta en posiciones de memorias no vinculadas entre si. • Agregar una entidad implica hacerlo en cada uno y luego rescatar cada dato del lugar y posición adecuadas. • Para introducir el concepto de registro, debemos definir un nuevo tipo de datos (nuestro), que maneje los seis valores “juntos”, asociados y agrupados.

  13. Estructuras Nombre de la estructura. • Una definición global puede ser: Lista de campos miembros. Lista de variables. Referencia a campos miembros. Array de estructuras. Compilador C++ Microsoft 9.0

  14. Estructuras • Una definición más elaborada: • Para usar … • Salida: • Acta: 123 Codigo de Materia: 43 Fecha:14/09/2009 • A-1613/8 Apellido, Nombre calle, nro, piso, ... Nota:8.25 Compilador C++ Microsoft 9.0

  15. Punteros a Estructuras Formas de inicializar. Array de Punteros. Uso de Punteros. Cálculo de tamaños. Salida.

  16. Punteros a Punteros a Estructuras • Más ejemplos. Punteros. Direcciones. Valores. Salida.

  17. Punteros a Funciones. • Sintaxis: • <tipo_devuelto> ... (* nombre_puntero) (<parametros>) ... • <tipo_devuelto>  es el tipo de vuelto por la función señalada por el puntero, podríamos decir que es el tipo de variable señalada por el puntero en último extremo. Puede ser void. • (* nombre_puntero) Esta parte es conocida como núcleo de la declaración. Sin los paréntesis de la declaración, cambia su sentido, ya que es considerada por el compilador como la declaración de una función. • <parametros>  es la lista de los argumentos aceptados por la función señalada por el puntero.

  18. Punteros a Funciones. Ejemplos.

More Related