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à ! -
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 -
sa ne devré pas étre un & pour transformer un char* en char?
&(char*) = char ? -
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
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Non mais là, argv[2] est déjà un pointeur donc &argv[2] correspond à l'adresse du pointeur ce qui ne va pas.
oui tu a raison -