Question sur les pointeurs
cemoi
-
cemoi -
cemoi -
Bonjour,
je suis en train de reprendre un vieil exercice de programmation, et j'ai un problème avec les pointeurs utilisés dans le code suivant:
pourquoi est ce que oper est un char et pas un char * et après on dit oper=*(argv[2]) (on a alors un pointeur non ?) ?
merci !
je suis en train de reprendre un vieil exercice de programmation, et j'ai un problème avec les pointeurs utilisés dans le code suivant:
int main(int argc, char* argv[])
{
int n1,n2,result;
char oper;
if (argc!=4)
{
printf("erreur!!\n");
exit(0);
}
n1=atoi(argv[1]);
n2=atoi(argv[3]);
oper=*(argv[2]);
switch(op)
{
case'+':
result=n1+n2;
break;
case'-':
result=n1-n2;
break;
case'x':
result=n1*n2;
break;
case'/':
result=n1/n2;
break;
}
printf("the result is %d\n",result);
}
pourquoi est ce que oper est un char et pas un char * et après on dit oper=*(argv[2]) (on a alors un pointeur non ?) ?
merci !
6 réponses
Simplement parce que tu as déclaré oper comme un char et non un char*.
Remplace la ligne : char oper;
Par : char* oper;
Voilà !
Remplace la ligne : char oper;
Par : char* oper;
Voilà !
Salut,
pourquoi est ce que oper est un char et pas un char * et après on dit oper=*(argv[2]) (on a alors un pointeur non ?) ?
argv est défini en tant que char *argv[];
argv[0] va désigner le premier argument, ..., argv[2] va désigner le 3 ème argument.
Ensuite tu fais *(argv[2]) (en fait, c'est l'équivalent de argv[2][0]), ce qui va prendre le premier caractère du troisième argument, soit un char.
Cdlt
pourquoi est ce que oper est un char et pas un char * et après on dit oper=*(argv[2]) (on a alors un pointeur non ?) ?
argv est défini en tant que char *argv[];
argv[0] va désigner le premier argument, ..., argv[2] va désigner le 3 ème argument.
Ensuite tu fais *(argv[2]) (en fait, c'est l'équivalent de argv[2][0]), ce qui va prendre le premier caractère du troisième argument, soit un char.
Cdlt
Petit détail, c'est switch(oper) et non switch(op), non ?
Sûrement vu qu'op n'est pas défini.
De plus, il serait mieux de mettre exit(1) ou return 1, que exit(0) dans le cas d'une erreur et de mettre return 0; avant l'accolade finale.
Il faudrait aussi s'assurer que n2 est différent de 0 dans le cas de la division.
Et il vaut mieux utiliser strtol qu'atoi pour gérer la détection d'erreurs.
Cdlt
De plus, il serait mieux de mettre exit(1) ou return 1, que exit(0) dans le cas d'une erreur et de mettre return 0; avant l'accolade finale.
Il faudrait aussi s'assurer que n2 est différent de 0 dans le cas de la division.
Et il vaut mieux utiliser strtol qu'atoi pour gérer la détection d'erreurs.
Cdlt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Non, argv[2] renvoie un char* donc *(argv[2]) renvoie bien un char ;-).
Merci !