Professional Documents
Culture Documents
ndice.
Revisando conceptos acerca de la memoria. Las variables en los programas. Punteros y direcciones. Aritmtica de punteros. Estructuras y Uniones. Extendiendo los conceptos a funciones.
C/C++
Memoria.
El lugar (ubicacin) de cada byte es nico y es su direccin. Si los bytes son consecutivos la direccin se ira incrementando secuencialmente. 171 186 137 99
Celda: Valor Decimal 10101011 Celda: Valor Binario Direccin:0xC100 Direccin +1: 0xC101 Direccin + 3: 0xC103 10111010 10001001 1100011
C/C++
Variables
Una variable es una porcin de memoria identificada por un nombre. El tipo de dato define su representacin binaria y longitud. Tiene tres valores asociados: Nombre, Contenido y Direccin. Declaramos: int n=1523, m=121;
Valor: 121 Valor: 1523 00000101 11110011
Contenido:
0000000
01111001
Direccin:
Direccin: C100
Direccin: C102
C/C++
Tipos de Variables
El tipo de variable establece: Rango de valores que maneja. Codificacin binaria del dato. Cantidad de memoria requerida.
Bytes
1 4+1 5x2=10
Declaracin
char c = X; char w[ ] = hola; int n[5] = {555,444,333,222,111}
3x4=12
00 00 00 64 00 00 00 C8 00 00 01 2C
float f = 3.141592
40 49 0F D8
C/C++
Punteros
Un puntero es una variable cuyo contenido es una direccin. Como todas las variable tiene nombre, contenido y direccin. Un puntero apunta a: un dato, un array, un objeto, una funcin, etc. int n; declara una variable entera (16 bits / 2 bytes) int *j; declara un puntero tipo entero (solo almacena direcciones). j contiene una direccin donde comienza un entero. *j valor entero almacenado en la direccin apuntada por j (indireccin). n contenido=valor del entero &n direccin del entero en n j contenido=valor de la direccin. *j contenido en la direccin de j.
j en la direccin 0xF234
Lugar: 2 byte donde esta almacenado n j0xA010 Valor *j=n 40
n en la direccin 0xA010 y
Lugar: 2 byte donde esta almacenado j
Direccin: &j0xF234
C/C++
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;
Direccin: 0xA010 Direccin +4 0xA014 Direccin + 12 0xA01C 40 30 20 10
*(j+2) n[2] 20
Valor apuntado por j ms 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.
C/C++
Punteros de Punteros
Un puntero puede almacenar una direccin 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 p 0x4310 &j 0x4310 Entonces: *p j 0x3021 **p *j 4562 &p 0x4F02
Interpretacin:
Con el valor de p obtiene la direccin de j: *p &j Con el valor de j obtiene la direccin de n: *j &n Con el tipo de p interpreta el valor de n. Esta es la secuencia de **p
*(*(p)) 4562
*( j ) 4562 n 4562
C/C++
Punteros de Punteros
Representacin grfica de doble indireccin
int n= 4562;
Lugar: 2 byte donde esta almacenado p
**p=*j=n 4562
**p=*j=n *p=j p
C/C++
Uso de Punteros
Compilador C (CodeWarrior)
C/C++
Uso de Punteros
Compilador C (CodeWarrior)
C/C++
Uso de Punteros
Compilador C (CodeWarrior)
C/C++
Introduccin 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 exmenes de un turno:
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 posicin adecuadas. Para introducir el concepto de registro, debemos definir un nuevo tipo de datos (nuestro), que maneje los seis valores juntos, asociados y agrupados.
C/C++
Estructuras
Nombre de la estructura.
Lista de variables.
Array de estructuras.
C/C++
Estructuras
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
C/C++
Punteros a Estructuras
Formas de inicializar. Array de Punteros.
Uso de Punteros.
Clculo de tamaos.
Salida.
C/C++
Ms ejemplos.
Punteros.
Direcciones.
Valores.
Salida.
C/C++
Punteros a Funciones.
Sintaxis: <tipo_devuelto> ... (* nombre_puntero) (<parametros>) ... <tipo_devuelto> es el tipo de vuelto por la funcin sealada por el puntero, podramos decir que es el tipo de variable sealada por el puntero en ltimo extremo. Puede ser void. (* nombre_puntero) Esta parte es conocida como ncleo de la declaracin. Sin los parntesis de la declaracin, cambia su sentido, ya que es considerada por el compilador como la declaracin de una funcin. <parametros> es la lista de los argumentos aceptados por la funcin sealada por el puntero.
C/C++