Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1679 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] Que fait le code suivant ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Que fait le code suivant ?

n°242697
charlene
Verba volant, scripta manent
Posté le 10-11-2002 à 17:14:10  profilanswer
 

Code :
  1. char *c[] = {
  2. "ENTER",
  3. "NEW",
  4. "POINT",
  5. "FIRST"
  6. };
  7. char **cp[] = {  c+3, c+2, c+1, c };
  8. char ***cpp = cp;
  9. main()
  10. {
  11. printf("%s", **++cpp );
  12. printf("%s ", *--*++cpp+3 );
  13. printf("%s", *cpp[-2]+3 );
  14. printf("%s\n", cpp[-1][-1]+1 );
  15. }


 
NB : je sais c'est connu, mais tjrs intéressant

mood
Publicité
Posté le 10-11-2002 à 17:14:10  profilanswer
 

n°242746
Ace17
Posté le 10-11-2002 à 19:05:08  profilanswer
 

[citation]Que fait le code suivant[/citation]
Mal à la tete...

n°242748
nico168
Posté le 10-11-2002 à 19:12:23  profilanswer
 

laisse moi reflechir....mmmm...
 
POINTER STEW
 
 :whistle:

n°242750
kadreg
profil: Utilisateur
Posté le 10-11-2002 à 19:20:44  profilanswer
 

Il compile pas, il appelle à printf sans #include <kivabien>


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°242765
charlene
Verba volant, scripta manent
Posté le 10-11-2002 à 19:52:42  profilanswer
 

kadreg a écrit a écrit :

Il compile pas, il appelle à printf sans #include <kivabien>



quel pinailleur celui là
il était pas destiné à êtr ecompilé

n°242773
drasche
Posté le 10-11-2002 à 20:16:00  profilanswer
 

après avoir encaissé un petit mal de crâne, je tombe sur POINTER STEW aussi...


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°242804
Carbon_14
Posté le 10-11-2002 à 22:03:42  profilanswer
 

Il est écrit comme ça, windows ??
Tout s'éclaircit, donc ... :D

n°242871
Musaran
Cerveaulté
Posté le 11-11-2002 à 03:54:26  profilanswer
 

Code :
  1. main()

L'int implicte a été banni il y a combien de temps ?
Il va falloir que la génération qui a appris avant ça meure de viellesse ou quoi ?
 
Remarquons aussi que int implicite ou pas, il faut un return 0; en C.
 

Code :
  1. char *c[] = {

Enfin, remarquons que la notation hongroise est mal utilisée, ceci est un "apc" ou "asz".
 
Bref, j'en arrive à la même conclusion: "POINTER STEW".
 
Si quemlqu'un veut l'explication, il faut la demander gentiment.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°243341
blackgodde​ss
vive le troll !
Posté le 12-11-2002 à 10:29:46  profilanswer
 

moi je voudraiq bien l'explication stp, g aboslument rien compris


---------------
-( BlackGoddess )-
n°243345
drasche
Posté le 12-11-2002 à 10:37:21  profilanswer
 

je ne vais pas me risquer à une explication, mes connaissances du C ne sont plus ce qu'elles étaient et en plus je suis pas doué pour les explications de trucs aussi tordus :/


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
mood
Publicité
Posté le 12-11-2002 à 10:37:21  profilanswer
 

n°243879
Musaran
Cerveaulté
Posté le 13-11-2002 à 04:00:02  profilanswer
 

Rappelons un peu d'arithmétique des pointeurs:
pointeur+i équivaut à &pointeur[i].
pointeur[i] équivaut à *(pointeur+i)
 
Et bien sûr, un tableau (a) utilisé dans une expression devient un pointeur sur son premier élément (&a[0]).
 
Dans cette explication, j'utilise comme nom pour case de tableau l'expression qui l'a initialisée, mise entre "guillemets".
"," signifie qu'une variable a été modifiée (-- ++)
":" signifie qu'on change d'objet dans l'expression

Code :
  1. //simples pointeurs
  2. char* s1= "ENTER";
  3. char* s2= "NEW";
  4. char* s3= "POINT";
  5. char* s4= "FIRST";
  6. //tableau de pointeurs
  7. char* c[]= {s1, s2, s3, s4 };
  8. //tableau de pointeurs sur pointeurs
  9. char** cp[]= {
  10. c+3, //pointeur sur "s4" dans c
  11. c+2, //pointeur sur "s3" dans c
  12. c+1, //pointeur sur "s2" dans c
  13. c    //pointeur sur "s1" dans c (c seul équivaut à c+0)
  14. };
  15. //pointeur sur pointeur sur pointeur
  16. char*** cpp= cp; //cp est pris comme pointeur sur "c+3" dans cp
  17. int main(void) //voici un beau main standard
  18. {
  19. printf("%s", **++cpp );
  20. //             ++cpp //incrémenter, cpp pointe alors sur "c+2" dans cp
  21. //            *      //déréférencer: "c+2" dans cp
  22. //           *       //déréférencer: "s3" dans c
  23. //affiche "POINT"
  24. printf("%s ", *--*++cpp+3 );
  25. //                ++cpp   //incrémenter, cpp pointe alors sur "c+1" dans cp
  26. //               *        //déréférencer: "c+1" dans cp
  27. //             --         //décrémenter, "c+1" pointe alors sur s1 dans c
  28. //            *           //déréférencer: "s1" dans c
  29. //                     +3 //équivaut à &s1[3]: pointeur sur le 2ème 'E' de "ENTER"
  30. //affiche "ER " (espace dans le format du printf)
  31. printf("%s", *cpp[-2]+3 );
  32. //            cpp[-2]   //équivaut à *(cpp-2): "c+3" dans cp
  33. //           *          //déréférencer: "s4" dans c
  34. //                   +3 //équivaut à &s4[3]: pointeur sur le 'S' de "FIRST"
  35. //affiche "ST"
  36. printf("%s\n", cpp[-1][-1]+1 );
  37. //             cpp[-1]       //équivaut à *(cpp-1): "c+2" dans cp (pointeur sur "s3" de c)
  38. //                    [-1]   //équivaut à *(&c[2]-1) == *&c[1] == c[1]: "s2" de c
  39. //                        +1 //équivaut à &s2[1]: pointeur sur le 'E' de "NEW"
  40. //affiche "EW\n"
  41. return 0; //pas l'oublier...
  42. }


"pointer stew" signifie "compote/ragoût de pointeurs".
 
Et voilà.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] Que fait le code suivant ?

 

Sujets relatifs
[Requette Access] Comment la traduire en code VBA ? HELP SVP !!!!!!!executer du code situer dans un fichier texte c possible???
une idee de ce que fait ce codeCompilation totale en code natif???
HELP : Optimiser mon code php[HTML] interpretation de code
Besoin d'aide pour mon bout de code PHPComment executer du code qui se trouve dans un buffer ?
Question sur le code des pages webPourquoi ce code déforme ma page ?
Plus de sujets relatifs à : [C] Que fait le code suivant ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR