Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ADMINISTRACIÓN DE MEMORIA
Direcciones de Memoria:
Posición en la que se almacena una variable en memoria.
Estructura de la memoria:
Al definir una variable se le asocian 0x4fffd34
tres atributos: el nombre, el tipo y n 54
la dirección de memoria. int
0x4fffd30
p 0x4fffd34
0x4fffd34
n 54
int
#include <stdio.h>
Int main(){
int n=54;
Int *p=&n;
printf(“n= %d, &n=%p, p=%p”, n, &n, p);
printf(“&p= %p ”,&p);
}
ADMINISTRACIÓN DE MEMORIA
• Operadores de Punteros:
• Operador de Dirección (&): Operador # include <stdio.h>
unario que devuelve la dirección de su
operando. void main(){
char c;
char * ptrC;
• Operador de Indirección u operador
de desreferencia (*): Devuelve el valor ptrC=&c;
del objeto al que apunta su operando (un
apuntador). for (c='A';c<='z';c++)
printf("%c",*ptrC);
}
ADMINISTRACIÓN DE MEMORIA
Declaración de Punteros:
Ejemplos:
int *ptr1;
long * ptr2;
Char *ptr3;
ADMINISTRACIÓN DE MEMORIA
Inicialización de punteros:
Se le asigna una dirección de memoria utilizando el operador &.
Ejemplo: &i //indica se asigna la dirección de la variable i
Inicialización estática:
Se define una variable y luego se le asigna la dirección de memoria
a un puntero. Ejemplo:
Int i;
Int *p;
p=&i;
Asignar un valor a la dirección de memoria:
*p=50;
ADMINISTRACIÓN DE MEMORIA
Inicialización dinámica:
Asignación dinámica de memoria, utilizando funciones de
asignación como: malloc(), callorc(), realloc(), free().
ADMINISTRACIÓN DE MEMORIA
float *ptr;
char c;
c=&ptr; //No es válido
ADMINISTRACIÓN DE MEMORIA
Uso de Operadores & y *:
#include <stdio.h>
int main()
{
int a; /* a es un entero */
int *ptrA; /* ptrA es un apuntador a un entero */
a = 7;
ptrA = &a; /* ptrA toma la dirección de a */
Operador sizeof:
Operador unario que permite determinar el tamaño en bytes de un
arreglo o de cualquier otro tipo de dato durante la compilación del
programa.
Ejemplo:
Sizeof(char); //1
Sizeof(int); //4
Sizeof(double); //8
Ejemplo:
/* Cuando el operador sizeof se utiliza en un nombre de arreglo, éste devuelve el
número de bytes en el arreglo. */
#include <stdio.h>
int main()
{
float arreglo[ 20 ]; /* crea arreglo */
Apuntadores y arreglos
Ejemplo:
Int b[ 5 ] ;
Int *ptrB;
ptrB = b; //ptrB = &b[ 0 ];
Apuntadores y arreglos
Notación apuntador/subíndice.
} /* fin de main */