Je voudrais savoir ce que signifie cette boucle ?
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Je voudrais savoir ce que signifie cette boucle ?



  1. #1
    invite35c863d9

    Je voudrais savoir ce que signifie cette boucle ?


    ------

    Bonsoir,

    Étudiant en informatique, je voudrais connaître la signification de la boucle suivante : for(P=CH; *P; P++){}

    De ce que j'ai compris le pointeur P prends la valeurs du pointeur CH, jusqu'à ??, puis on ajoute +1 à la valeur du pointeur,

    Merci de votre aide,

    -----

  2. #2
    pm42

    Re : Je voudrais savoir ce que signifie cette boucle ?

    On se déplace jusqu'à ce que la valeur pointée par P ne soit pas nulle. On utilise ça souvent pour parcourir une chaine de caractères : en C, elles sont représentées par un tableau de char et on indique la fin en mettant un élément à 0 (vu que cela ne correspond pas au code ASCII d'un caractère valide).

    C'est très classique d'un certain style de programmation qui avait l'avantage d'être concis à une époque où les écrans étaient petits (voir inexistants) et qui simplifiait le travail du compilateur qui ne pouvait pas être aussi sophistiqué qu'aujourd'hui pour des raisons de puissance des machines.

    De nos jours, en dehors du fait qu'il y a encore beaucoup de code C à faire vivre, c'est une aberration.

  3. #3
    champetre

    Re : Je voudrais savoir ce que signifie cette boucle ?

    Bonjour,

    Ce serait plutôt : on se déplace tant que la valeur pointée par P n'est pas nulle, et on arrête quand elle le devient, nous disant qu'on a atteint la fin de la chaîne.

  4. #4
    pm42

    Re : Je voudrais savoir ce que signifie cette boucle ?

    Oui, il y a une erreur dans ma phrase et on se déplace tant que la valeur n'est pas nulle. Ou jusqu'à ce qu'elle soit nulle.

  5. A voir en vidéo sur Futura
  6. #5
    albanxiii
    Modérateur

    Re : Je voudrais savoir ce que signifie cette boucle ?

    Bonjour,

    La réponse a été donnée, alors je me permet un petit hors sujet.

    Citation Envoyé par pm42 Voir le message
    De nos jours, en dehors du fait qu'il y a encore beaucoup de code C à faire vivre, c'est une aberration.
    Je ne suis pas programmeur, mais j'utilise le C, et la boucle initiale ne me choque pas. Pourquoi est-ce une aberration ? Et forcément, la question qui vient ensuite : qu'est-ce que tu utiliserais (toujours en C) pour faire la même chose ?
    Not only is it not right, it's not even wrong!

  7. #6
    pm42

    Re : Je voudrais savoir ce que signifie cette boucle ?

    Citation Envoyé par albanxiii Voir le message
    Pourquoi est-ce une aberration ?
    Déjà, la lisibilité est faible : la manipulation du pointeur se fait avec le ++ qui est concis mais pas intuitif. En fait, c'est une traduction en langage C d'une instruction assembleur.
    Pour l'avoir fait, c'est aussi l'enfer à enseigner aux programmeurs débutants.

    Et le pire est le test de fin : *P qui mélange la valeur d'un char avec ce qui est intrinsèquement un booléen. Là aussi, au niveau assembleur, c'est logique : un char, c'était une valeur 8 bits en mémoire qu'on chargeait dans un registre et que le processeur savait comparer rapidement à 0.

    Ensuite, la représentation des string avec le 0 à la fin est elle aussi datée : très peu consommatrice en mémoire mais on ne peut pas connaitre la longueur rapidement et toute opération sur le type est compliqué puisqu'il faut gérer les allocations mémoire.


    Citation Envoyé par albanxiii Voir le message
    Et forcément, la question qui vient ensuite : qu'est-ce que tu utiliserais (toujours en C) pour faire la même chose ?
    En C je ferais ça parce que c'est ce qui est normal dans le langage.

    Mais j'aurais tendance à utiliser plutôt C++ et les string si je devais rester dans le monde C. Ce qui donne :
    Code:
    for (char const &c: s)
    Mais je passerais plutôt à un langage comme Rust qui est pratiquement aussi rapide mais beaucoup plus sur et la syntaxe se met à ressembler à tous les langages de haut niveau récents :

    Code:
    for c in my_str.chars() { 
        // do something with `c`
    }
    
    for (i, c) in my_str.chars().enumerate() {
        // do something with character `c` and index `i`
    }
    P.S : Microsoft expérimente pour utiliser Rust dans le code Windows et du coté Linux, cela fait partie des choses envisagées aussi avec prudence.
    On verra bien si ce langage finit par remplacer le C ou si ce sera Go ou autre...

Discussions similaires

  1. je voudrais savoir quelle et cette insecte qui squatte chez moi !!! svp
    Par invite201a35e6 dans le forum Identification des espèces animales ou végétales
    Réponses: 3
    Dernier message: 02/06/2021, 16h17
  2. Je voudrais savoir quelque chose sur les ingénieurs en mecanique
    Par invite823dbee7 dans le forum Programmation et langages, Algorithmique
    Réponses: 16
    Dernier message: 07/07/2017, 18h01
  3. mon chat ma ramene cette enorme chose, et je voudrais bien savoir ce que c'est
    Par invite10d41795 dans le forum Identification des espèces animales ou végétales
    Réponses: 2
    Dernier message: 05/09/2016, 19h32
  4. je voudrais savoir comment on démontre ces deux encadrement :
    Par invite008ba666 dans le forum Mathématiques du collège et du lycée
    Réponses: 10
    Dernier message: 27/10/2012, 01h38
  5. Je voudrais si possible savoir quelle est cet araignée
    Par invite9682dce7 dans le forum Identification des espèces animales ou végétales
    Réponses: 4
    Dernier message: 23/09/2009, 15h47