¿Como obtener el tamaño de un array de mas de una dimension?

Quiero obtener el tamaño de un array bidimesional, no se como hacerlo. Ademas no entiendo muy bien como lo explican en otros foros. Agradezco su ayuda y explicacion. Gracias.

int x [][4] = {{0,0,1,1}, {0,1,0,1}, {1,1,1,1}}; //Entradas: Entrada 1, Entrada 2, biais 
int A [][4] = {{0,1,0,0}, {0,0,1,0}, {0,1,1,0}}; //Salidas: A1, A2, Y. Para el entrenamiento de Y entra A1 y A2
const byte dimx = sizeof ( x) / sizeof ( int);
const byte dimA = sizeof ( A) / sizeof ( int);

O en forma mas general

sizeof (array) / sizeof (array[0])

lo que traducido sería

Serial.println(sizeof(x)/sizeof(x[0]));

Está linea de código que escribió no la entiendo, ¿cómo funciona surbyte?

 sizeof (array[0])

Es genérica.
Array es cada uno de tus dos matrices

Luego te puse el ejemplo!!

La funcion sizeof() evalúa el tamaño de memoria reservado para una variable o matriz en bytes.

int A[][4] = {{0,1,0,0}, {0,0,1,0}, {0,1,1,0}};

byte dimA = sizeof(A);                           //24 bytes
byte dimA = sizeof(A) / sizeof(int);          //12 elementos
byte dimA = sizeof(A) / (4 * sizeof(int));  //3 filas + 4 columnas

Como tu preguntaste por el numero de elementos de la matriz es necesario dividir entre el tipo de datos usado te da el numero de elementos y si añades el numero de columnas te dara las filas.

Ahora tiene sentido usar int (2 bytes) para guardar 1 y 0 ? considera este ejemplo:

bool A[][4] = {{0,1,0,0}, {0,0,1,0}, {0,1,1,0}};

byte dimA = sizeof(A);                             //12 bytes
byte dimA = sizeof(A) / sizeof(bool);          //12 elementos
byte dimA = sizeof(A) / (4 * sizeof(bool));  //3 filas + 4 columnas