C/C

++

Punteros. Dirección. In dirección. Aritmética de direcciones.

Í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.

. In dirección. Dirección. 171 186 137 99 Celda: Valor Decimal 10101011 Celda: Valor Binario Dirección:0xC100 Dirección +1: 0xC101 Dirección + 3: 0xC103 10111010 10001001 1100011  Cada celda tiene dos valores asociados: Dirección y Contenido. 1 0 1 1 0 0 1 1   El lugar (ubicación) de cada byte es único y es su dirección. Memoria. El byte es un conjunto de 8 bits. Unidad de memoria. Si los bytes son consecutivos la dirección se ira incrementando secuencialmente.C/C++ Punteros. Aritmética de direcciones. 1 2 3 4 5 6 7 8 9 A B C D E F   La unidad de memoria más pequeña es el bit.  La memoria es un conjunto de celdas contiguas donde se almacenan datos.

Dirección. Tiene tres valores asociados: Nombre. .C/C++ Punteros.” Valor: 121 Valor: 1523 00000101 11110011   Contenido:   n  1523 m  121 &n  C102 &m  C100 0000000 01111001  Dirección:   Dirección: C100 Dirección: C102  Es contenido binario se codifica (bits) de acuerdo al tipo de variable. El tipo de dato define su representación binaria y longitud. In dirección. m=121. Variables    Una variable es una porción de memoria identificada por un nombre. Aritmética de direcciones. Contenido y Dirección. Declaramos: “int n=1523.

. In dirección.  Codificación binaria del dato. Aritmética de direcciones.111} Valor en Memoria Hexa 58 68 6F 6C 61 00 02 2B 01 BC 01 4D 00 DE 00 6F Valor en Memoria Binario 1011000 01101000 01101111 01101100 01100001 00000000 00000010 00101011 00000001 10111100 00000001 01001101 00000000 11011110 00000000 01101111 00000000 00000000 00000000 01100100 00000000 00000000 00000000 11001000 00000000 00000000 00000001 00101100 1000000010010010000111111011000 long l[3] = {100.333. Bytes 1 4+1 5x2=10 Declaración char c = „X‟. char w[ ] = “hola”. Tipos de Variables  El tipo de variable establece:  Rango de valores que maneja.444.200. int n[5] = {555. Dirección.222.141592 4 40 49 0F D8  En todos los casos la dirección de almacenaje es “&variable”.C/C++ Punteros.300} 3x4=12 00 00 00 64 00 00 00 C8 00 00 01 2C float f = 3.  Cantidad de memoria requerida.

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

j Tiene un lugar de memoria para su contenido. Su comportamiento es de acuerdo al tipo definido. Algebra de punteros   Los punteros se usan como cualquier otra variable. In dirección. Aritmética de direcciones. ocupa 8/16/32/64 bits de acuerdo al micro.” 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. Dirección. j esta almacenada en &j. *j=n.10}.   .20. “long n[ ]={40. Dirección: 0xA010 Dirección +4 0xA014 Dirección + 12 0xA01C 40 30 20 10       *(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.30.C/C++ Punteros.

Dirección. Esta es la secuencia de  **p *(*(p))  4562 *( j )  4562 n  4562 . El valor final apuntado puede obtenerse en forma directa. Aritmética de direcciones. “j=&n”. Supongamos que: &n 0x3021 p  0x4310 &j  0x4310 Entonces: *p  j  0x3021 **p  *j  4562 &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. hacemos “n=4562”. *j. **p”.C/C++ Punteros. “int n. Punteros de Punteros        Un puntero puede almacenar una dirección de otro puntero. In dirección. “p=&j”.

In dirección.C/C++ Punteros. Lugar: 2 byte donde esta almacenado p &n  0x3021 &j  0x4310 &p  0x4F02 int *j = &n. p0x4310 Lugar: 2 byte donde esta almacenado j Dirección: &p0x4F02 *p=j  0x3021 Lugar: 2 byte donde esta almacenado n Dirección: &j=p0x4310 **p=*j=n  4562 **p=*j=n *p=j p 4562 0x3021 0x4310 Dirección: &n=j0x3021 . Aritmética de direcciones. Dirección. Punteros de Punteros Representación gráfica de doble indirección int n= 4562. int **p =&j.

asignación y uso de punteros.C/C++ Punteros. Uso de Punteros  Ejemplo de un código. Aritmética de direcciones. 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) . Dirección. In dirección.

Dirección. In dirección.C/C++ Punteros. Aritmética de direcciones. Toma la dirección de p 0x14E Compilador C (CodeWarrior) . Uso de Punteros  Como obtiene el valor de **p.

Uso de Punteros  Sumemos “p += 2. El valor de **p queda.”. In dirección.C/C++ Punteros. Dirección. Toma la dirección de p 0x14E Compilador C (CodeWarrior) . Aritmética de direcciones.

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

0 . Referencia a campos miembros. Dirección. Aritmética de direcciones. In dirección. Estructuras  Una definición global puede ser: Nombre de la estructura. Lista de variables. Lista de campos miembros. Array de estructuras.C/C++ Punteros. Compilador C++ Microsoft 9.

nro. Aritmética de direcciones.C/C++ Punteros.. Estructuras  Una definición más elaborada:  Para usar …    Salida: Acta: 123 Codigo de Materia: 43 Fecha:14/09/2009 A-1613/8 Apellido.0 . . piso. In dirección. Dirección.. Nota:8.25 Compilador C++ Microsoft 9. Nombre calle.

Salida. Cálculo de tamaños. Punteros a Estructuras Formas de inicializar. In dirección. Uso de Punteros. Dirección. Array de Punteros. Aritmética de direcciones. .C/C++ Punteros.

Dirección. Valores. Punteros. Punteros a Punteros a Estructuras  Más ejemplos. Direcciones. . In dirección.C/C++ Punteros. Aritmética de direcciones. Salida.

  Sintaxis: <tipo_devuelto> . Sin los paréntesis de la declaración.C/C++ Punteros... (* nombre_puntero) (<parametros>) . (* nombre_puntero) Esta parte es conocida como núcleo de la declaración. Punteros a Funciones. <parametros> es la lista de los argumentos aceptados 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. cambia su sentido. <tipo_devuelto> es el tipo de vuelto por la función señalada por el puntero.. In dirección. ya que es considerada por el compilador como la declaración de una función.. Dirección. Aritmética de direcciones.

Aritmética de direcciones. . In dirección. Dirección.C/C++ Punteros. Punteros a Funciones. Ejemplos.

Sign up to vote on this title
UsefulNot useful