Coucou les Arduinautes,
Pour compléter ma formation sur les pointeurs, je travaille actuellement sur les tableaux.
En principe, si j’ai bien compris, faire suivre la déclaration d’un tableau par {N} remplit tous ses éléments par la valeur N.
Je teste avec le programme suivant qui devrait remplir par des $AA55.
Bernique, seul le premier élément est rempli, et de plus on a FFFF qui ne s’explique pas. Si je teste par une valeur de type numérique du genre 13, seule la première valeur est initialisée, les autres restent à 00.
Vous avez une idée ?
Voici mon programme :
/* Utilisations des pointeurs dans les tableaux */
#define NB 5 // Nombre d'éléments dans le tableau.
int TABLEAU[NB] = {0xAA55};
int *PTR = NULL; // Pointeur pour travailler dans le tableau.
void setup() { Serial.begin(115200);
//TABLAU[] = {0xAA55}; // Si non indiqué serait initialisé à 00.
}
void loop() {
Afficher_le_tableau();
for (PTR = TABLEAU; PTR < &TABLEAU[NB]; PTR ++)
{*PTR = 0x7388;}
Afficher_le_tableau();
INFINI: goto INFINI; }
void Afficher_le_tableau() {
for (PTR = TABLEAU; PTR < &TABLEAU[NB]; PTR ++)
{Serial.println(*PTR , HEX);} }
Bonjour,
nulentout:
En principe, si j’ai bien compris, faire suivre la déclaration d’un tableau par {N} remplit tous ses éléments par la valeur N.
Non, ça met la valeur N dans l'élément 0. Les autres éléments sont à 0
C'est dans la norme du C
Bernique, seul le premier élément est rempli, et de plus on a FFFF qui ne s’explique pas.
Normal (mais je n'ai pas compris où était FFFF)
Bonjour,
Le C n'initialise jamais une zone mémoire, c'est au programmeur à l'initialiser.
Si tu veux initialiser avec des zéros, utilises calloc() ou memset() après ton malloc()
Compris !
Merci les copains pour vos réponses.
Mince, mon petit livret sur la SYNTAXE est donc faux en page 13, il valoir que le le corrige et remplacer la version qui est en ligne !
Normal (mais je n'ai pas compris où était FFFF)
Le premier élément est affiché FFFFAA55 au lieu de AA55 ???
nulentout:
Le premier élément est affiché FFFFAA55 au lieu de AA55 ???
J'ai jeté un oeil dans Print.cpp
Serial.print(int num, int base) fait :
print((long) n, base);
Il est donc imprimé en tant que long.
Comme ton nombre 16 bits est signé, le cast (long)n effectue une extension de signe. Comme le nombre est négatif (bit 15 à 1), les 16 bits de poids fort qui sont ajoutés sont à 1. D'où le FFFF.
Mais il y a bien AA55 dans l'élément 0 du tableau.