12.4: Uso de la memoria
- Page ID
- 82110
El puntero que se devuelve desde la función de asignación se utiliza como base del objeto o matriz de objetos en los que te interese. Manteniéndolo simple, supongamos que desea asignar una matriz de tres enteros. Si desea establecer el primer elemento en 0, y el segundo y tercer elementos en 1, haga lo siguiente (solo fragmento de código, no se muestra el procesamiento de errores):
int *ip; if( ip = calloc( 3, sizeof(int) ) ) { *ip = 0; *(ip+1) = 1; /* could also say ip[1] = 1; */ *(ip+2) = 1; /* could also say ip[2] = 1; */ }
Anote la libertad que tenemos con el puntero. Se puede usar como un puntero normal o pensarse como la base de una matriz e indexarse en consecuencia. Del mismo modo, podríamos necesitar asignar una estructura e inicializar sus campos. Aquí hay una función a la que podemos llamar para asignar una estructura foobar
, inicializar algunos campos y devolverle un puntero.
struct foobar { double d; int i; char name[20]; }; /* other code... */ struct foobar * alloc_foobar( void ) { struct foobar *fp; if( fp = malloc( sizeof(struct foobar) ) ) { fp->d = 12.0; /* just some stuff to show how... */ fp->i = 17; strcpy( fp->name, “Timmy” ); } return( fp ); }