IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

pointeur sur caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut pointeur sur caractère
    Bonjour,

    J'ai un peu de mal avec les chaines de caractère, aussi j'ai voulu faire quelques tests, et je tombe sur un os.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdlib.h>
    #include <stdio.h>
     
    int main ()
    {
    char *chaine = "a" ;
    printf ( "%s" , chaine ) ;
    printf ( "%d" , chaine ) ; /* ne passe pas a la compilation, car printf
    demande un  type char*. Pourtant, chaine est un pointeur, donc une adresse,
    donc un type int pour moi. Une explication ?*/
    printf ( "%d" , *chaine ) ;
    return EXIT_SUCCESS ;
    }
    Résultat :
    a
    1345143840 (je sais pas à quoi ça correspond, parce que j'ai un warning à la compilation...)
    97 (ce résultat me parait bizarre, je pensais que printf ( "%d" , *chaine ) me renverrai le code ascii de la lettre a, or 97 ne correspond pas.)


    Merci d'avance de vos explications (:

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    - Un int n'est pas un pointeur, un pointeur n'est pas un int. Deux types différents, qui peuvent d'ailleurs avoir deux tailles différentes. Ils ne sont pas interchangeables.

    - Tu peux utiliser %p pour afficher un pointeur.

    - Un warning n'est pas une erreur. Si tu n'as que des warnings mais pas d'erreur, le compilation réussit quand même. Il est même possible (comme dans ton exemple) qu'il s'exécute correctement.

    - 1345143840 est la valeur décimale de ton pointeur, en supposant que sur ton architecture les int et les pointeurs ont la même taille.

    - En ASCII, 'a' est bien représenté par 97.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par silma Voir le message
    1345143840 (je sais pas à quoi ça correspond, parce que j'ai un warning à la compilation...)
    Ben c'est le second printf donc c'est l'affichage au format "%d" de la valeur contenue dans la variable "chaine", à savoir l'adresse de la zone mémoire contenant la chaine statique "a"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Par défaut
    1.Un int c'est surtout pas un pointeur !
    un int est un type de variable destiné à stocker un nombre entier.
    un pointeur est une variable qui contient l'adresse d'une autre variable (qui peut etre un int, un char, ou tout autre type de variable).
    Une discussion traite de ce qui est un pointeur : http://www.developpez.net/forums/d21...quun-pointeur/

    2.Pour ce qui est de ton 'a', pk un printf("%d', chaine), alors qu'un printf("%c", *chaine) t'aurai affiché ton 'a' !

    3. Tu as l'air de t'interesser au pointeur sur chaine de caractère en particulier (tu dis avoir un peu de mal avec les chaines de caractères).
    Alors voilà de quoi méditer un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    char *str = "developpez.org"; // concrétement en mémoire : developpez.org\0
     
    printf("%c", str[0]); // affiche d
    printf("%c", *str); // affiche d 
    printf("%c", *++str);  // affiche e
    printf("%d", longueur_chaineT(str)); // longueur chaine avec tableaux 
    printf("%d", longueur_chaineP(str)); // meme chose avec pointeurs
     
    int longueur_chaineT(char *str) // en utilisant les tableaux
    {
     int nb;
     for(nb = 0; str[nb]; nb++); // str[nb] != '\0' si tu préfères
     return nb; 
    }
     
    int longueur_chaineP(char *str)
    {
     int nb;
     for(nb = 0; *str; *str++, nb++);
     return nb ;
    }
    je sais pas que dire d'autres sur les pointeurs sur chaine de caractères ... si tu as des questions hésites pas

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    Merci de vos réponses !
    Citation Envoyé par matafan Voir le message
    - Tu peux utiliser %p pour afficher un pointeur.
    Citation Envoyé par Sve@r Voir le message
    Ben c'est le second printf donc c'est l'affichage au format "%d" de la valeur contenue dans la variable "chaine", à savoir l'adresse de la zone mémoire contenant la chaine statique "a"...
    J'ai fait un 'printf ( "%p" , chaine ) du coup, et ça me renvoit 0X80486e00, ce qui fait 2152230400 (calcul fait ici) et non 134514400 Finalement l'adresse vers laquelle pointe mon pointeur c'est 134514400 ou 2152230400 du coup ? (dites moi si je suis à côté de la plaque).

    Citation Envoyé par matafan Voir le message
    - En ASCII, 'a' est bien représenté par 97.
    Effectivement j'avais pas vu que majuscules et minuscules avaient un code différent...

    Citation Envoyé par hh-cx Voir le message
    2.Pour ce qui est de ton 'a', pk un printf("%d', chaine), alors qu'un printf("%c", *chaine) t'aurai affiché ton 'a' !
    Parce qu'on m'a dit qu'un char c'était stocké sous forme d'un int, et que la table ascii assurait la correspondance. Je voulais voir si l'entier correspondait au caractère.
    Citation Envoyé par hh-cx Voir le message
    3. Tu as l'air de t'interesser au pointeur sur chaine de caractère en particulier (tu dis avoir un peu de mal avec les chaines de caractères).
    Alors voilà de quoi méditer un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    char *str = "developpez.org"; // concrétement en mémoire : developpez.org\0
     
    printf("%c", str[0]); // affiche d
    printf("%c", *str); // affiche d 
    printf("%c", *++str);  // affiche e
    printf("%d", longueur_chaineT(str)); // longueur chaine avec tableaux 
    printf("%d", longueur_chaineP(str)); // meme chose avec pointeurs
     
    int longueur_chaineT(char *str) // en utilisant les tableaux
    {
     int nb;
     for(nb = 0; str[nb]; nb++); // str[nb] != '\0' si tu préfères
     return nb; 
    }
     
    int longueur_chaineP(char *str)
    {
     int nb;
     for(nb = 0; *str; *str++, nb++);
     return nb ;
    }
    for(nb = 0; str[nb]; nb++); C'est une sorte de while en fait ? Je savais pas qu'on pouvait faire ça avec des for.
    Par contre je comprends pas ce for(nb = 0; *str; *str++, nb++); justement.
    c'est "tant que *str (et donc le 'd' de 'developpez') est non nul, et tant que *str++ (qui est donc le 'e' de 'developpez') est non nul, incrementer 'nb' "
    Le problème c'est que 'd' et 'e' ne vaudront jamais 0, et ça devrait tourner à l'infini non ? Pourquoi ça marche ?

    Citation Envoyé par hh-cx Voir le message
    si tu as des questions hésites pas
    J'en avais notamment à propos d'un char**, mais j'ai plus la version du programme qui ne fonctionne pas Si je me rappelle bien, en gros, j'avais un variable de type char**, et je l'avais initialisée ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *pointeur[LONGUEUR]
    ça ne marchait pas, alors que c'est bien un type char**. Il avait fallu que je l'initialise vraiment avec les deux asterisques : Je vais essayer de reproduire l'erreur parce que ça m'avait beaucoup étonné.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Par défaut
    Citation Envoyé par silma Voir le message
    Parce qu'on m'a dit qu'un char c'était stocké sous forme d'un int, et que la table ascii assurait la correspondance.
    C'est pas un int. Un int a une taille de 4 octects, un char c'est un 1 octect (d'une étendue de 255), et dont la valeur correspond à une entrée dans la table ASCII. C'est un nombre, oui d'accord, mais sur 1 octet. donc pas un int.
    Citation Envoyé par silma Voir le message
    for(nb = 0; str[nb]; nb++); C'est une sorte de while en fait ? Je savais pas qu'on pouvait faire ça avec des for.
    for est une boucle, tout comme while, dont la "forme" est
    for (avant_debut_boucle; condition; apres chaque execution)
    donc for (nb = 0; str[nb]; nb++) c'est tout comme
    nb = 0;
    while (str[nb])
    {
    nb++;
    }
    Citation Envoyé par silma Voir le message
    Par contre je comprends pas ce for(nb = 0; *str; *str++, nb++); justement.
    c'est "tant que *str (et donc le 'd' de 'developpez') est non nul, et tant que *str++ (qui est donc le 'e' de 'developpez') est non nul, incrementer 'nb' "
    Le problème c'est que 'd' et 'e' ne vaudront jamais 0, et ça devrait tourner à l'infini non ? Pourquoi ça marche ?
    Pärce que chaque chaine de caractère à un caractère '\0' (NULL) à la fin.
    Donc apres le d e v l o p p e z, la boucle tombe sur '\0', qui signifie la fin de la chaine. D'ou le commentaire dans le post précédent :
    char *str="developpez.com" // concretemet en memoire developpez.com\0
    Pareil pour la version avec les tableaux, c le meme principe, str[15] sera égal à '\0' ... d'ou la fin de la boucle.

    Citation Envoyé par silma Voir le message
    J'en avais notamment à propos d'un char**, mais j'ai plus la version du programme qui ne fonctionne pas Si je me rappelle bien, en gros, j'avais un variable de type char**, et je l'avais initialisée ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *pointeur[LONGUEUR]
    ça ne marchait pas, alors que c'est bien un type char**. Il avait fallu que je l'initialise vraiment avec les deux asterisques : Je vais essayer de reproduire l'erreur parce que ça m'avait beaucoup étonné.
    char ** definit un pointeur sur un pointeur sur char.
    décompose la problèmatique.
    Une chaine de caractère, une phrase, c'est un pointeur sur le premier caractère de cette chaine, sachant qu'on retrouve la fin grace à \0.
    Si l'on a un pointeur sur ce pointeur, on peut donc stocker plusieurs chaines de caractère sur lesquelles ont peut pointer. Ca revient aussi à un tableau à 2 dimensions. Prends le cas de argv :
    soit un programme "desc.exe" appellé en ligne de commande avec des paramètres : desc.exe -l toto titi -n tata
    on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main(int ac, char **av)
    {
      printf(av[1]); // affiche -l 
      printf(av[2]); // affiche toto
      printf(*++av); // affiche -l
      printf(*++av); // affiche toto
      printf("%c", av[2][1]); // affiche le i de titi
    }
    d'ailleurs on peut déclarer la fonction main comme ca :
    int main(int ac, char **av)
    ou
    int main(int ac, char *av[])
    ou
    int main(int ac, char av[][])

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par silma Voir le message
    J'ai fait un 'printf ( "%p" , chaine ) du coup, et ça me renvoit 0X80486e00, ce qui fait 2152230400 (calcul fait ici) et non 134 514 400 Finalement l'adresse vers laquelle pointe mon pointeur c'est 134 514 400 ou 2 152 230 400 du coup ? (dites moi si je suis à côté de la plaque).
    2 hypothèses
    1) T'as modifié ton code, et recompilé ton code. Et lors de la seconde compilation, la chaine statique a été stockée à une adresse différente de la première compilation. Il te faudrait afficher, dans le même programme, ton pointeur au format %d et %p pour bien pouvoir comparer

    2) dans ton architecture, un pointeur n'a pas la même taille qu'un int (cf message de matafan)

    Perso je penche plutôt pour la n° 1...

    Citation Envoyé par silma Voir le message
    Effectivement j'avais pas vu que majuscules et minuscules avaient un code différent...
    Normal. Comment l'ordi ferait la différence sinon ???


    Citation Envoyé par silma Voir le message
    Parce qu'on m'a dit qu'un char c'était stocké sous forme d'un int, et que la table ascii assurait la correspondance. Je voulais voir si l'entier correspondait au caractère.
    Faut faire attention entre
    - ce qu'on dit parfois pour simplifier entre programmeurs habitués
    - ce qu'on dit lors de l'apprentissage
    Faut aussi voir qui le dit etc etc. Mais c'est vrai qu'à la base du C, tout est numérique codé en binaire donc l'un dans l'autre, on peut dire qu'un caractère n'est qu'un nombre entier. Bref faut savoir faire la part des choses quoi...

    Citation Envoyé par silma Voir le message
    for(nb = 0; str[nb]; nb++); C'est une sorte de while en fait ?
    Un for regroupe en une ligne
    - initialisation
    - test
    - incrément
    alors qu'avec un while il faut 3 instructions. Toutefois, il y a une très subtile différence entre ce code
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    i=0;
    while (i < 10)
    {
        printf("i=%d\n", i);
        if (i == 6) continue;
        i++;
    }

    et ce code
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (i=0; i < 10; i++)
    {
        printf("i=%d\n", i);
        if (i == 6) continue;
    }

    T'as qu'à tester les deux et tu comprendras...

    Citation Envoyé par silma Voir le message
    Je savais pas qu'on pouvait faire ça avec des for.
    Oui alors on espère quand-même qu'avant de t'attaquer à des notions comme pointeurs et tableaux t'as au-moins les bases du langage et que tu sais ce qu'est un while, un for, un do while quoi. Et aussi qu'un if n'est pas une boucle (je ne compte plus les fois où j'ai vu le neuneu de base écrire "problème dans boucle if"...)

    Citation Envoyé par silma Voir le message
    Par contre je comprends pas ce for(nb = 0; *str; *str++, nb++); justement.
    c'est "tant que *str (et donc le 'd' de 'developpez') est non nul, et tant que *str++ (qui est donc le 'e' de 'developpez') est non nul, incrementer 'nb' "
    Le problème c'est que 'd' et 'e' ne vaudront jamais 0, et ça devrait tourner à l'infini non ? Pourquoi ça marche ?
    Les instructions "*str++" et "nb++" sont placées dans le dernier groupe du for, après le dernier point-virgule. Donc il s'agit ici des instructions d'incrément et non de test. Toutefois l'étoile dans ce "*str++" posté par hh-cx ne sert ici absolument à rien !!!

    Citation Envoyé par hh-cx Voir le message
    un char c'est un 1 octect (d'une étendue de 255), et dont la valeur correspond à une entrée dans la table ASCII.
    Et dont la valeur correspond à ce que tu lui mets !!! Si j'écris char c=25 ben la table ASCII n'a absolument rien à voir là dedans !!!

    Citation Envoyé par hh-cx Voir le message
    soit un programme "desc.exe" appellé en ligne de commande avec des paramètres : desc.exe -l toto titi -n tata
    on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(int ac, char **av)
    {
      printf(av[1]); // affiche -l 
      printf(av[2]); // affiche toto
      printf(*++av); // affiche -l
      printf(*++av); // affiche toto
      printf("%c", av[2][1]); // affiche le i de titi
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(int ac, char **av)
    {
      printf("%s\n", av[1]); // affiche -l 
      printf("%s\n", av[2]); // affiche toto
      printf("%s\n", *++av); // affiche -l
      printf("%s\n", *++av); // affiche toto
      printf("%c\n", av[2][1]); // affiche le n de -n !!!
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 44
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    printf("%c\n", av[2][1]);[COLOR="Red"] // affiche le n de -n !!!
    effectivement ... ptite étourderie de ma part, j'ai omis l'execution des deux lignes d'avant quand j'écrivais.

    Citation Envoyé par Sve@r Voir le message
    Toutefois l'étoile dans ce "*str++" posté par hh-cx ne sert ici absolument à rien !!!
    pour éviter la confusion, pour la (re)lecture, par habitude

    Citation Envoyé par Sve@r Voir le message
    dont la valeur correspond à ce que tu lui mets !!! Si j'écris char c=25 ben la table ASCII n'a absolument rien à voir là dedans !!!
    25 correspond aussi à un caractère de la table ascii, un caractère non imprimable certes ... mais si je printf le char, y'a une correspondance. un printf sur un char de valeur 7 fais bien un beep ?
    Quand je parle de correspondance, c'etait juste pour tenter d'expliquer pk un char n'est pas un int, mais un nombre entier qui correspond à une entrée dans la table ASCII (si c'est l'usage qu'on veut en faire, on fait ce qu'on veut après)

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 56
    Par défaut
    wahouuu ! Bon alors vous m'avez largué sur la fin mais j'ai compris l'essentiel, et au passage j'ai appris qu'une boucle for c'était pas forcément juste un for (i=0 ; i<N; i++)

    Juste : après la remarque de Sve@r j'ai voulu tester le programme que tu m'as donné avec et sans l'astérisque hh-cx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdlib.h>
    #include <stdio.h>
     
     
     
    int longueur_chaineP(char *str);
    int longueur_chaineT(char *str);
     
    int main ()
    {
    char *str = "developpez.org"; // concrétement en mémoire : developpez.org\0
     
    printf("%c", str[0]); // affiche d
    printf("%c", *str); // affiche d 
    printf("%c", *++str);  // affiche e
    printf("%d", longueur_chaineT(str)); // longueur chaine avec tableaux 
    printf("%d", longueur_chaineP(str)); // meme chose avec pointeurs
     return EXIT_SUCCESS;
    }
     
    int longueur_chaineT(char *str) // en utilisant les tableaux
    {
     int nb;
     for(nb = 0; str[nb]; nb++); // str[nb] != '\0' si tu préfères
     return nb; 
    }
     
    int longueur_chaineP(char *str)
    {
     int nb;
     for(nb = 0; *str; *str++, nb++);
     return nb ;
    }
    En fait avec l'astérisque si je comprend bien, ça marche parce que l'opération '++' se fait avant l'opération '*'. Le fait de rajouter '*' ne change rien, si ce n'est que ça n'a pas de sens parce que ce n'est pas une opération d'incrémentation. d'où le "test.c:31: warning: value computed is not used" à la compilation. J'ai pigé ?

    Pour tes deux petits exemples hh-cx j'ai saisi la subtilité. ça marche avec la boucle for parce que tu incrémentes obligatoirement en début de chaque boucle. La boucle while aurait fonctionné si on avait incrémenté avant l'instruction continue.

    merci pour vos réponses détaillées et rapides, et surtout bonne vacances à tous !

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par silma Voir le message
    En fait avec l'astérisque si je comprend bien, ça marche parce que l'opération '++' se fait avant l'opération '*'. Le fait de rajouter '*' ne change rien, si ce n'est que ça n'a pas de sens parce que ce n'est pas une opération d'incrémentation. d'où le "test.c:31: warning: value computed is not used" à la compilation. J'ai pigé ?
    Exact. str++ incrémente le pointeur (donc l'adresse se décale en mémoire) et *... donne la valeur qu'il y a à cet endroit... valeur non récupérée donc inutile ici

    Citation Envoyé par silma Voir le message
    Pour tes deux petits exemples hh-cx j'ai saisi la subtilité. ça marche avec la boucle for parce que tu incrémentes obligatoirement en début de chaque boucle. La boucle while aurait fonctionné si on avait incrémenté avant l'instruction continue.
    C'est moi qui ai donné ces deux exemples. Et effectivement, dans le for, l'incrément se fait dès que l'itération recommence, quelle qu'en soit la raison (et donc aussi au continue), ce que ne fait pas le while...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/05/2011, 17h58
  2. Pointeur sur une chaine de caractère string
    Par Lucier dans le forum C#
    Réponses: 9
    Dernier message: 17/03/2010, 14h22
  3. [allegro]passage de pointeur sur image
    Par Gonath dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 13/12/2003, 18h47
  4. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37
  5. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo