Différence entre (uint32_t)tableau[0] et *(uint32_t*)&tableau[0] ?
Bonjour,
dans le cadre du développement d'une appli, je suis tombé sur une ligne de code un peu étrange qui a un comportement encore plus bizarre que ce à quoi elle ressemble :
Code:
return *(uint32_t*)&tableau[0];
Je m'explique : tableau est (comme son nom l'indique) un tableau d'uint8_t. La fonction d'où est tirée la ligne ci-dessus est supposée récupérer la valeur du premier uint8_t de ce tableau puis la caster en uint32_t.
Cependant (ce n'est pas moi qui ait écrit ce code), il me semblait plus simple de procéder comme ceci :
Code:
return (uint32_t)tableau[0];
cad utiliser directement la valeur plutôt que de caster en pointeur puis déréférencer. Cependant, ces deux lignes ne renvoient pas la même valeur !
J'ai alors essayé une troisième forme, pour le test :
Code:
return *(uint32_t*)tableau;
Cette dernière renvoie les mêmes valeurs que la première forme mais je n'arrive pas à saisir en quoi la seconde forme est différente des deux autres... Quelqu'un peut-il m'éclairer ?
D'avance, merci !
Fointard