Pointeurs en langages c

Résolu/Fermé
aqwxc - 29 avril 2008 à 18:14
alicia85 Messages postés 68 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 20 août 2009 - 28 mai 2008 à 14:20
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..

3 réponses

vlmath Messages postés 793 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
29 avril 2008 à 18:50
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
0
alicia85 Messages postés 68 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 20 août 2009
28 mai 2008 à 11:45
bonjr t es la j ai un pb en langage c stp merci
0
Char Snipeur Messages postés 9691 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 14 avril 2023 1 328
28 mai 2008 à 12:13
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
0
alicia85 Messages postés 68 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 20 août 2009
28 mai 2008 à 12:20
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
0
Char Snipeur Messages postés 9691 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 14 avril 2023 1 328 > alicia85 Messages postés 68 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 20 août 2009
28 mai 2008 à 14:13
Si 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
0
alicia85 Messages postés 68 Date d'inscription lundi 19 mai 2008 Statut Membre Dernière intervention 20 août 2009
28 mai 2008 à 14:20
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();
}
0