#include #include #define A_ROWS 50 #define A_COLS 100 typedef struct MY_REC { char name[32]; int age; double income; } my_rec; extern int errno; #define assign_errno(x) ((errno != 0) ? errno : (x)) int main() { int cc = 0; my_rec **arry2 = NULL; /* **arry2 is a pointer to a pointer */ /* First allocate an array of pointers for the ROWS */ arry2 = (my_rec **) calloc((size_t) A_ROWS,sizeof(*arry2)); if (arry2 != NULL) { /* Now for each row element we allocate A_COLS my_recs */ int i = 0; while (i < A_ROWS && cc == 0) { arry2[i] = (my_rec *) calloc((size_t) A_COLS,sizeof(my_rec)); if (arry2[i] != NULL) ++i; else { cc = assign_errno(-1); (void) fprintf(stderr,"Can't allocate columns (%d)\n",cc); } } } else { cc = assign_errno(-1); (void) fprintf(stderr,"Can't allocate rows (%d)\n",cc); } /* Now lets access those elements */ if (cc == 0) { int i = 0,j = 0; while (i < A_ROWS) { j = 0; while (j < A_COLS) { (void) sprintf(arry2[i][j].name,"Row %3d Col %3d",i,j); arry2[i][j].age = i + j + 1; arry2[i][j].income = (double) (i + j + 1) * 1000.0; ++j; } ++i; } i = 0; while (i < A_ROWS) { j = 0; while (j < A_COLS) { (void) printf("Name: %s Age: %5d Income: %9.2lf\n", arry2[i][j].name,arry2[i][j].age, arry2[i][j].income); ++j; } ++i; } } return(cc); }