PUNTEROS PROGRAMACION EN C
MEMORIA.
La memoria es un conjunto de celdas contiguas donde se almacenan
datos.
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.
El byte es un conjunto de
8 bits. Unidad de memoria.
1 0 1 1 0 0 1 1
El lugar (ubicación) de cada byte es único y es su dirección.
Si los bytes sonconsecutivos la dirección se ira incrementando
171
186
137
99
secuencialmente.
Celda: Valor Decimal
10101011
10111010
10001001
1100011
Celda: Valor Binario
Dirección:0xC100
Dirección +1: 0xC101
Dirección + 3: 0xC103
Cada celda tiene dos valores asociados: Dirección y Contenido.
1
VARIABLES
Declaramos: “int n=1523, m=121;”
Contenido:
Dirección:
n 1523
m 121
Valor: 121
0000000
01111001
Dirección: C100
Valor: 1523
00000101
11110011
Dirección: C102
Programacion I. Ing° Juan José
Zambrano
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.&n C102
&m C100
Es contenido binario se codifica (bits) de acuerdo al tipo de
variable.
2
TIPOS DE VARIABLES
El tipo de variable establece:
Rango de valores que maneja.
Codificación binaria del dato.
Cantidad de memoria requerida.
Declaración
Bytes
Valor en Memoria Hexa
Valor en Memoria Binario
char c = ‘X’;
1
58
1011000
char w[ ] = “hola”;4+1
68 6F 6C 61 00
01101000 01101111 01101100
01100001 00000000
int n[5] = {555,444,333,222,111}
5x2=10
02 2B 01 BC 01 4D 00 DE 00 6F
00000010 00101011 00000001 10111100
00000001 01001101 00000000 11011110
00000000 01101111
long l[3] = {100,200,300}
3x4=12
00 00 00 64 00 00 00 C8 00 00 01
2C
00000000 00000000 00000000 01100100
00000000 00000000 0000000011001000
00000000 00000000 00000001 00101100
float f = 3.141592
En
49 0F D8 de almacenaje es1000000010010010000111111011000
todos los 4casos la 40
dirección
“&variable”.
Programación I. Ing° Juan José Zambrano
3
PUNTEROS
“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).
Programacion I. Ing° Juan José
Zambrano
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.
n contenido=“valordel entero”
j contenido=“valor de la
dirección”.
&n dirección
del entero
“n”
*j suponemos
contenido
en la dirección de
Representamos
“int en
n=40,
*j=&n;”
que se almacenan:
“j”.
n en la dirección 0xA010 y
Lugar: 2 byte donde esta
almacenado n
Lugar: 2 byte donde esta
almacenado j
j0xA010
Dirección: &j0xF234
j en la dirección 0xF234
Valor *j=n 40Dirección: j &n 0xA010
4
ALGEBRA DE PUNTEROS
“long n[ ]={40,30,20,10}, *j=n;”
j se inicializa con &n[0]
40
30
20
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:
0xA010
Dirección +4
0xA014
*(j+2) n[2] 20
Programacion I. Ing° Juan José
Zambrano
Lospunteros se usan como cualquier otra variable.
Su comportamiento es de acuerdo al tipo definido.
10
Dirección + 12
0xA01C
Valor apuntado por j más 2 posiciones
Como j es tipo long incrementará 8 (4*2) bytes
El incremento depende del tipo.
5
j Tiene un lugar de memoria para su contenido.
j esta almacenada en &j, ocupa 8/16/32/64 bits de acuerdo al micro.
PUNTEROS...
Regístrate para leer el documento completo.