[Côté obscure du C] Pige pas ce ça fait ...

Pige pas ce ça fait ... [Côté obscure du C] - C++ - Programmation

Marsh Posté le 17-06-2003 à 14:00:00    

Salut,
Je suis tombé sur un bout de code en C, et là, ben, je pige vraiment pas comment ça marche

Code :
  1. int x= 1;
  2.     if ( *(char*) & x == 1 ) (...)


 
C'est quoi ce *(char*) ? :??:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-06-2003 à 14:00:00   

Reply

Marsh Posté le 17-06-2003 à 14:02:00    

c'est le caractère ascii 1
 
Y a aucun truc : ça se lit tel quel :
"Valeur pointée par un char* casté à partir d'un int* qui pointe vers 1"


Message édité par Tetragrammaton IHVH le 17-06-2003 à 14:05:25

---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 17-06-2003 à 14:04:20    

HelloWorld a écrit :

Salut,
Je suis tombé sur un bout de code en C, et là, ben, je pige vraiment pas comment ça marche

Code :
  1. int x= 1;
  2.     if ( *(char*) & x == 1 ) (...)


 
C'est quoi ce *(char*) ? :??:


l'adresse de x est castée en char * et * devant sert à aller voir la valeur pointée par le char *.

Reply

Marsh Posté le 17-06-2003 à 14:08:01    

pfffff, quel *** !!!
Je croyais qu'il effectuait un ET binaire entre x et l'expression *(char *). Je pigeais pas komen *(char*) pouvait etre une expression.
Merci les gars.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-06-2003 à 14:28:40    

Au fait, ca n'a rien à voir avec la valeur ASCII 1.
C'est juste pour déterminer little / big endian.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-06-2003 à 15:13:13    

HelloWorld a écrit :

Salut,
Je suis tombé sur un bout de code en C, et là, ben, je pige vraiment pas comment ça marche

Code :
  1. int x= 1;
  2.     if ( *(char*) & x == 1 ) (...)


 
C'est quoi ce *(char*) ? :??:


 
Ce qui était trompeur dans ce que tu avais écrit, c'est l'espace entre ton '&' et 'x', parce que écrit tel quel ça doit être interprété comme un '&' logique, auquel cas ça n'aurait pas de sens...
 
si c'est bien

Code :
  1. if( *(char *)&x == 1)

on regarde si le contenu de l'adresse de x castée en char est égale à 1.
 
Mais où est l'intérêt d'une telle syntaxe?


---------------
Just drink it!
Reply

Marsh Posté le 17-06-2003 à 16:55:08    

masturbation intellectuelle ?

Reply

Marsh Posté le 17-06-2003 à 16:56:05    

xWillow a écrit :

masturbation intellectuelle ?


 
Non, non, cerveau déformé par des années de C.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 17-06-2003 à 17:05:08    

HelloWorld a écrit :

Au fait, ca n'a rien à voir avec la valeur ASCII 1.
C'est juste pour déterminer little / big endian.


 
ouki, le premier octet est testé pour savoir c'est l'octet de poids ford ou de poids faible en premier...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed