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
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
A voir également:
- Pointeurs en langages c
- D langage c ✓ - Forum C
- Mini projet en langage c corrigé - Forum C
- Et en langage c - Astuces et Solutions
- Deux pointeurs souris sous windows ✓ - Forum Windows
- Puissance en langage c ✓ - Forum C
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
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
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
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
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 :
Salutation ! avant je croyais, maintenant je suis fixé.Jésus Christ
Char Snipeur
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
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
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
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
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
erreur de segmentation veux dire 9 fois sur 10 que tu li dans un tableau en dehors de la taille allouée
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
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();
}
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();
}
28 mai 2008 à 11:45