C言語初心者です。

typedef struct{
int tate;
int yoko;
double *mat;
} Mat;

void read(int x,int y,Mat *a){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
printf("[%d][%d]->",i+1,j+1);
scanf("%lf",&a->mat[i][j]);
}
printf("\n");
}
return;
}

プログラムの一部を抜粋したものなのですが、これでコンパイルすると
subscripted value is neither array nor pointer
というエラーが出てしまいます。
二次元配列はポインタで表せないものなのでしょうか?