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

  1. 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
    1. fiddy Messages postés 441 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
      1. Pico51 Messages postés 846 Statut Membre 69 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        C'est vrai, au temps pour moi, désolé !
        0
      2. cemoi > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Effectivement, je comprends pourquoi maintenant (je m'embrouillais avec des pointeurs de pointeurs)
        Merci !
        0
  2. fiddy Messages postés 441 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
  3. chloé3702 Messages postés 65 Statut Membre 28
     
    sa ne devré pas étre un & pour transformer un char* en char?
    &(char*) = char ?
    0
    1. 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
  4. Pico51 Messages postés 846 Statut Membre 69
     
    Petit détail, c'est switch(oper) et non switch(op), non ?
    0
    1. fiddy Messages postés 441 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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