Je cherche à utiliser sizeof() avec un tableau à 2 dimensions tableau[y][z]. Le but serait d'obtenir la taille y et la taille z, que je ne connais pas (le tableau peut-être soumis à des changements de taille dans chaque dimension).
J'ai utilisé sizeof(tableau) pour obtenir z. J'ai utilisé en test un tableau de 16*15 éléments. Le résultat (obtenu avec Serial.begin) valait 480, que j'ai divisé par 30 pour obtenir 16.
J'ai ensuite doublé le tableau afin de tester: 960/30 = 32.
Pour y, sizeof(tableau[0]). Dans le premier cas, j'ai obtenu 30, que j'ai divisé par 2 pour obtenir 15.
Dans le deuxième cas (tableau doublé), j'avais toujours 30/2 = 15.
Je suis tout bon!
Par contre, je ne trouve pas la méthode très catholique. Quelqu'un a mieux à me proposer?
sizeof retourne le nombre de byte contenu dans la variable donc si tu utilise un int par exemple une case de ton tableau vaudra 2 puisque un int vaut 2 byte.
tu peux tester sizeof(char), sizeof(int), sizeof(long), etc, donc tu dois divisé également par le nombre de byte inclus dans le type défini.
exemple
int tab[16][15];
void setup()
{
Serial.begin(9600);
int z = sizeof(tab)/(sizeof(int)*(sizeof(tab[0])/sizeof(int)));
int y = sizeof(tab[0])/sizeof(int);
Serial.print("z=");
Serial.println(z);
Serial.print("y=");
Serial.println(y);
}
void loop()
{
}
C'est un problème courant, autant faire quelque chose de réutilisable... En restant dans l'esprit de ce que propose Osaka, tu peux utiliser des macros :
#define ROW_COUNT(array) (sizeof(array) / sizeof(*array))
#define COLUMN_COUNT(array) (sizeof(array) / (sizeof(**array) * ROW_COUNT(array)))
int tableau[16][64];
void setup(){
int y = ROW_COUNT(tableau);
int z = COLUMN_COUNT(tableau);
// [...]
}
Ainsi le calcul sera toujours valable même si tu changes le type de ton tableau.
J'ai rapidement testé les macros, ça fonctionne parfaitement, merci.
Concernant mon erreur par rapport au tableau, je posterai mon code demain.
Et si on ne trouve pas de solution, je pense que une fois la taille du tableau bien définie, ce ne sera plus un problème.