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 !
A voir également:
- Question sur les pointeurs
- Pointeurs souris - Guide
- Manipulation des pointeurs - Forum C
- Pointeurs photoshop problème ✓ - Forum Photoshop
- 2 pointeurs de souris sur un écran ✓ - Forum Windows
- Un pointeur qui se promène sur l'écran - Forum Virus
6 réponses
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
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 !