sábado, 11 de agosto de 2012

Punteros en C (II)

Punteros en C (II)

En la anterior entrada (Punteros en C), vimos los primeros pasos para trabajar con punteros en C. En este post, vamos a ir un poco más allá y veremos como trabajar con memoria dinámica. Para ello utilizaremos las instrucciones malloc y free.

Por ejemplo, podemos definir un array de enteros de forma estática de la siguiente manera:
int arr[5];
arr[1] = 6;

o reservando memoria de forma dinámica de la siguiente:
int* arr;
arr = malloc(sizeof(int)*5);
arr[1] = 5;

La instrucción malloc tiene la siguiente sintaxis:

void *malloc(size_t tamano);
Por eso en el ejemplo puesto anteriormente el tamaño ha de ser el equivalente a un array de 5 enteros. Para ello usamos la instrucción sizeof que nos devuelve el tamaño en este caso del entero y lo multiplicamos por el tamaño deseado del array quedando (sizeof(int)*5).

Struct

El siguiente paso se trata de trabajar con punteros y estructuras definidas por el usuario. Para ello primero definiremos una estructura:
struct prueba{
   int val;
};

Una vez tenemos definida la estructura definimos la variable del tipo prueba:
struct prueba p1;

y accedemos a sus variables poniendo un ".":
p1.val = 5;
Para hacerlo de forma dinámica definiremos un puntero del tamaño de la struct prueba:
struct prueba* pp = malloc (sizeof(struct prueba));
Y para acceder a sus variables tenemos dos formas:
(*pp).val = 2;
pp->val = 2;
 Todo esto se puede simplificar si en el momento de definir la estructura usamos la instrucción typedef:

typedef struct prueba{
   int val;
} prueba_t;

Ya que definimos un tipo prueba_t y a la hora de declarar las variables los definiremos como una variable de las ya predefinidas:
prueba_t p1;
y por en el momento de reservar memoria dinámica por ejemplo también se simplifica la sintaxis:
malloc(sizeof(prueba_t));

Hasta aquí hemos llegado con la segunda sesión de punteros... hasta la pŕoxima!!!!

 
 
 

No hay comentarios:

Publicar un comentario