#include <stdio.h>
#include <stdlib.h>

typedef struct {
	size_t rows,cols;
	double *mat;
} matrix;

matrix make(size_t rows,size_t cols)
  {
   matrix m;
   m.rows=rows;
   m.cols=cols;
   m.mat=(double*)malloc(rows*cols*sizeof(double));
   return m;
  }

void show(matrix m)
  {
   size_t i,y,x;
   for(i=y=0;y<m.rows;++y,printf("\n")) for(x=0;x<m.cols;++x,++i) printf(" %f"+!x,m.mat[i]);
  }

double *ati(matrix m,size_t i)
  {
   return m.mat+i;
  }

double *at(matrix m,size_t y,size_t x)
  {
   return ati(m,y*m.cols+x);
  }

void drop(matrix m)
  {
   free(m.mat);
  }

int main()
  {
   size_t i;
   matrix m1=make(2,5);
   matrix m2=make(3,3);
   for(i=0;i<9;++i) *(ati(m2,i))=i;
   show(m2);
   drop(m2);
   drop(m1);
   return 0;
  }