Question sur les pointeurs

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:
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

Pico51 Messages postés 846 Statut Membre 69
 
Simplement parce que tu as déclaré oper comme un char et non un char*.
Remplace la ligne : char oper;
Par : char* oper;
Voilà !
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
Simplement parce que tu as déclaré oper comme un char et non un char*.
Non, argv[2] renvoie un char* donc *(argv[2]) renvoie bien un char ;-).
0
Pico51 Messages postés 846 Statut Membre 69 > fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention  
 
C'est vrai, au temps pour moi, désolé !
0
cemoi > fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention  
 
Effectivement, je comprends pourquoi maintenant (je m'embrouillais avec des pointeurs de pointeurs)
Merci !
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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
0
chloé3702 Messages postés 65 Statut Membre 28
 
sa ne devré pas étre un & pour transformer un char* en char?
&(char*) = char ?
0
Pico51 Messages postés 846 Statut Membre 69
 
Non mais là, argv[2] est déjà un pointeur donc &argv[2] correspond à l'adresse du pointeur ce qui ne va pas.
0
Pico51 Messages postés 846 Statut Membre 69
 
Petit détail, c'est switch(oper) et non switch(op), non ?
0
fiddy Messages postés 11653 Date d'inscription   Statut Contributeur Dernière intervention   1 847
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chloé3702 Messages postés 65 Statut Membre 28
 
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
0
cemoi
 
merci a tous !
0