#define N 16 typedef int fix_matrix[N][N]; #define IDX(n, i, j) ((i)*(n)+(j)) /* Get element a[i][j] */ int fix_ele(fix_matrix a, int i, int j) { return a[i][j]; } /* Get element a[i][j] */ int var_ele(int n, int a[n][n], int i, int j) { return a[i][j]; } /* Get element a[i][j] */ int vec_ele(int n, int *a, int i, int j) { return a[IDX(n,i,j)]; } /* Retrieve column j from array */ void fix_column(fix_matrix a, int j, int *dest) { int i; for (i = 0; i < N; i++) dest[i] = a[i][j]; } /* Retrieve column j from array */ void vec_column(int n, int *a, int j, int *dest) { int i; for (i = 0; i < n; i++) dest[i] = a[IDX(n,i,j)]; } /* Retrieve column j from array */ void var_column(int n, int a[n][n], int j, int *dest) { int i; for (i = 0; i < n; i++) dest[i] = a[i][j]; } /* Retrieve column j from array */ void fix_column_p(fix_matrix a, int j, int *dest) { int *ap = &a[0][j]; int *endp = &a[N][j]; while (ap != endp) { *dest++ = *ap; ap += N; } }