Punteros En 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.
C/C++
Punteros. Dirección. In dirección. Aritmética de direcciones.
Memoria.
La memoriaes un conjunto de celdas contiguas donde se almacenan datos.
1
2
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
3
0
1
1
0
0
1
1
El lugar (ubicación) de cada byte es único y es su dirección.
Si los bytes son consecutivos la direcciónse ira incrementando
secuencialmente.
171
186
137
99
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.
C/C++
Punteros. Dirección. In dirección. Aritmética de direcciones.
Variables
Una variable es unaporció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;”
Valor: 121
Contenido:
Dirección:
n 1523
m 121
&n C102
&m C100
0000000
01111001
Dirección: C100
Valor: 1523
0000010111110011
Dirección: C102
Es contenido binario se codifica (bits) de acuerdo al tipo de variable.
C/C++
Punteros. Dirección. In dirección. Aritmética de direcciones.
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 enMemoria 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 012C
00000000 00000000 00000000 01100100
00000000 00000000 00000000 11001000
00000000 00000000 00000001 00101100
float f = 3.141592
4
40 49 0F D8
1000000010010010000111111011000
En todos los casos la dirección de almacenaje es “&variable”.
C/C++
Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros
Un puntero esuna 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 ladirección apuntada por “j” (indirección).
n contenido=“valor del entero”
&n dirección del entero en “n”
j contenido=“valor de la direcció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
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 40
Dirección: j &n 0xA010
C/C++
Punteros. Dirección. In dirección. Aritmética de direcciones.
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]
40
30
...
Regístrate para leer el documento completo.