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