Pointeurs en langages c

Résolu
Bonjour,
On m' a dit que en langage c *(p++) revient au meme que *p

pourtant *(p++) rend la valeur pointe par le pointeur (p++)
alors que *p renvoye la valeur pointe par le pointeur p

Merci de m'aider..
Configuration: Linux Fedora
Firefox 1.5.0.6

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Salut,

    a ben non, clairement pas ... Le mec qui t'as dis ça ne doit pas avoir un compilateur à jour dans la tête ... lol

    Tu as tout a fais raison, *p++ c'est pas la même chose que *p (t'es pas obligé de mettres les () ).

    @Bientôt
    1. bonjr t es la j ai un pb en langage c stp merci
  2. Contributeur
    Salut
    je serai plus nuancé. Je dirai oui et non.
    En C, *(p++) est équivalent à *p en ce qui concerne le résultat de la ligne. En revanche, après la ligne p sera incrémenter de 1. En revanche *(++p) est complètement différent de *p.
    Pour s'en convaincre, voici un petit programme :
    #include <stdio.h>
    int main()
    {
        char *c=(char*)malloc(2),*D;
        c[0]='a';c[1]='b';
        D=c;// on fait pointé D sur le premier caractère de c
        printf("%c %c\n",*(D++),*D);
        D=c; // réinitialisation de D
        printf("%c %c\n",*(++D),*D);
        return 0;
    }
    la sortie sera alors :
    a a
    b b
    --
    Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
    Char Snipeur
    1. bonjour a toi pourra tu m'aider ? j ai un pb avec mon tp peux tu m aider sur l'allocation en memoire .a l'execution on m'envoie des messages d'erreur .comme quoi erreur de segmentation merci
    2. Contributeur
      @alicia85Si tu veux de l'aide, écris déjà un message correctement.
      erreur de segmentation veux dire 9 fois sur 10 que tu li dans un tableau en dehors de la taille allouée
  3. stp voici une parti de mon code je ne sais ce qui se passe
    char*sh,*type,*c,c1;
    int i,j,k,l,v,n;
    printf("\t u:pour les entiers non signés\n\t d:pour les entiers decimaux signe a cplment a 2 \n\t b:pour les entiers decimaux signes cplmen a 1\n\t f:pour les flottants\n\t l:pour les flottants avec exposant biaise\n\t s:pour les chaines de caractere\n\t c pour les caracteres\n\n");
    printf("\n ...pour le decodage taper 1....pour quitter taper 2\n");
    scanf("%d",&n);
    if(n==1){
    type=(char*)malloc(sizeof(char));
    c=(char*)malloc(sizeof(char));
    sh=(char*)malloc(sizeof(char));
    printf("\t ENTRER VOTRE TYPE:");
    do
    scanf("%s",&type);
    while(strlen(type)==2);
    printf("\nENTRER VOTRE CHAINE ");
    do{
    scanf("%s",&sh); k++;
    }
    while ((i<strlen(type))&&((sh[k]==0)||(sh[k]==1)));
    //printf("la chaine est %s",sh);
    if(type=="u"){
    l=sizeof(unsigned int)*8;
    v=verif (sh,l);
    printf("alors la %d",v);
    if(v==1){
    i=decode_int(sh);
    printf("le code est %d\n:",i);
    }
    printf("erreur dans le code");
    }
    else
    if(type=="b"){
    l=sizeof(int)*8;
    v=verif (sh,l);
    if(v==1){
    c=decode_cpl1(sh);
    printf("le code est %s\n:",c);
    }
    printf("erreur dans le code");
    }
    else
    if(type="d"){
    l=sizeof(unsigned int)*8;
    v=verif (sh,l);
    printf("je suis %d",v);
    if(v==1){
    c=decode_cpl2(sh);
    printf("le code est %s\n:",c);
    }
    printf("erreur dans le code");
    }
    else
    if (type=="c"){
    l=sizeof(char)*8;
    v=verif (sh,l);
    if(v==1){
    c1=decode_char(sh);
    printf("le code est %c\n:",c1);
    }
    printf("erreur dans le code");
    }
    else
    if (type=="s")
    {v=verif_char(sh);
    if(v==1){
    c=decode_chaine(sh);
    printf("le code est %s\n:",c);
    }
    printf("erreur dans le code");
    }
    return 1;
    }
    exit(0);
    getch();
    getch();
    }