Questo funziona per me (commenti spiega perché):
#include <stdio.h>
int main() {
char result[10][7] = {
{'1','X','2','X','2','1','1'},
{'X','1','1','2','2','1','1'},
{'X','1','1','2','2','1','1'},
{'1','X','2','X','2','2','2'},
{'1','X','1','X','1','X','2'},
{'1','X','2','X','2','1','1'},
{'1','X','2','2','1','X','1'},
{'1','X','2','X','2','1','X'},
{'1','1','1','X','2','2','1'},
{'1','X','2','X','2','1','1'}
};
// 'total' will be 70 = 10 * 7
int total = sizeof(result);
// 'column' will be 7 = size of first row
int column = sizeof(result[0]);
// 'row' will be 10 = 70/7
int row = total/column;
printf("Total fields: %d\n", total);
printf("Number of rows: %d\n", row);
printf("Number of columns: %d\n", column);
}
E l'uscita di questo è:
Total of fields: 70
Number of rows: 10
Number of columns: 7
EDIT:
Come indicato da @AnorZaken, passando l'array a una funzione come parametro e stampando il risultato di sizeof
su di esso, verrà emesso un altro total
. Questo perché quando passi un array come argomento (non un puntatore ad esso), C lo passerà come copia e applicherà qualche magia C in mezzo, quindi non stai passando esattamente come pensi di essere. Per essere sicuri di ciò che si sta facendo ed evitare un po 'di lavoro extra della CPU e il consumo di memoria, è meglio passare array e oggetti per riferimento (usando i puntatori). Così si può usare qualcosa di simile, con gli stessi risultati come originale:
#include <stdio.h>
void foo(char (*result)[10][7])
{
// 'total' will be 70 = 10 * 7
int total = sizeof(*result);
// 'column' will be 7 = size of first row
int column = sizeof((*result)[0]);
// 'row' will be 10 = 70/7
int row = total/column;
printf("Total fields: %d\n", total);
printf("Number of rows: %d\n", row);
printf("Number of columns: %d\n", column);
}
int main(void) {
char result[10][7] = {
{'1','X','2','X','2','1','1'},
{'X','1','1','2','2','1','1'},
{'X','1','1','2','2','1','1'},
{'1','X','2','X','2','2','2'},
{'1','X','1','X','1','X','2'},
{'1','X','2','X','2','1','1'},
{'1','X','2','2','1','X','1'},
{'1','X','2','X','2','1','X'},
{'1','1','1','X','2','2','1'},
{'1','X','2','X','2','1','1'}
};
foo(&result);
return 0;
}
'colonna int = sizeof (risultato [0])/sizeof (risultato [0] [0]); ' – BLUEPIXY
Dato che sono statici, perché dovresti contarli comunque? Basta definire le costanti per le righe e le dimensioni del col, invece di usare "numeri magici". – Lundin