Valeur flottante exprimée en caractère

Dans le code ci-dessous,

#include int main(){ char array[] = {'1', 2, 5.2}; char* my_pointer = array[2]; printf("%c", *my_pointer); } 

5.2 est stocké dans la représentation IEEE 754 en mémoire, char sélectionne 8 bits (en premier) dans cette représentation flottante, en raison du format endian limité.

C est un langage mal typé. Suis autorisé à lancer float à char .

Pourquoi le programme est-il vidé de son kernel?

 char* my_pointer = array[2]; 

est faux. Le RHS de qui est de type char , pas un char* . L’augmentation du niveau d’avertissement dans votre compilateur vous aidera à identifier des problèmes de ce type.

Avec gcc -Wall , j’obtiens l’avertissement suivant:

 soc.c: In function 'main': soc.c:4:23: warning: initialization makes pointer from integer without a cast char* my_pointer = array[2]; 

Après cela, le programme a un comportement indéfini.

Ce dont vous avez besoin c’est:

 char* my_pointer = &array[2]; 

ou

 char* my_pointer = array + 2; 

Dans votre programme, changez char *my_pointer = array[2]; to char *my_pointer = &array[2]; en tant que pointeur devrait stocker l’adresse.

 #include int main(){ char array[] = {'1', 2, 45.2}; char *my_pointer = &array[2]; printf("%c", *my_pointer); } 

sortie:

 - //NOTE: asci value of - is 45 

Comme @AnT l’ a mentionné dans les commentaires, lorsque vous convertissez 45.2 en type char , le compilateur génère un code qui charge 45.2 , tronque la valeur et la stocke dans votre variable char sous la forme 45 , lorsque vous imprimez, vous obtenez - en sortie.