Partage
  • Partager sur Facebook
  • Partager sur Twitter

scanf et tableau

le & devant tab[] pou pas..? et pourquoi ?

    10 juillet 2018 à 11:17:51

    salut,

    j'arrive pas à piger comment il faut écrire un scanf avec des tableaux..

    par exemple si j'ai

    int tableau[5]={0}//un tableau de 5 chiffres
    
    scanf("%d",&tableau[0]); //--> ont met le & devant la variable tableau

    si
    char tableau[5]="";// un tableau avec 5 caractères
    
    scanf("%d",tableau[]); //--> ont met PAS le & devant la variable tableau

    j'ai bon ?...

    • Partager sur Facebook
    • Partager sur Twitter

    L'internet c'est parti pour 1000 ans !

      10 juillet 2018 à 11:21:22

      Oui pour le 1) non pour le 2)
      • Partager sur Facebook
      • Partager sur Twitter
        10 juillet 2018 à 11:29:38

        alamax a écrit:

        j'arrive pas à piger comment il faut écrire un scanf avec des tableaux..

        par exemple si j'ai

        int tableau[5]={0}//un tableau de 5 chiffres
        
        scanf("%d",&tableau[0]); //--> ont met le & devant la variable tableau


        si

        char tableau[5]="";// un tableau avec 5 caractères
        
        scanf("%d",tableau[]); //--> ont met PAS le & devant la variable tableau

        Bonjour,

        Il faut d'abord noter que les deux expressions :

        tableau
        &tableau[0]

        produisent exactement la même valeur : l'adresse de l'élément initial du tableau.

        Passons maintenant à la spécification de conversion "%d" : Elle nécessite l'adresse d'un int (où enregistrer le résultat).
        Donc on peut écrire :

        int tableau[5];
        scanf("%d", tableau);
        scanf("%d", &tableau[0]);
        

        Les deux lignes avec scanf sont bonnes.

        A noter qu'un tableau de int contient des nombres, pas des chiffres...

        Ton deuxième exemple est faux, car on ne peut pas obtenir l'adresse d'un int à partir d'un tableau de char...
        En outre, tableau[] n'est pas une expression valide, car l'opérateur [] a 2 opérandes...

        -
        Edité par Marc Mongenet 10 juillet 2018 à 11:31:39

        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2018 à 8:10:39

          Pour continuer ce que dit Marc Mongenet scanf demande toujours des pointeurs comme arguments, donc :

          int var;
          int tab[10];
          int *ptr = malloc ( sizeof ( int ) * 10 );
          
          
          // valide
          // ---------------------------------------------
          // &var : adresse de la variable
          //
          // tab : adresse du tableau ( zone mémoire )
          // &tab : adresse du tableau (car il est définit à l'initialisation)
          // &tab[0] : adresse du premier élément du tableau
          // &tab[1] : adresse du second élément du tableau
          //
          // ptr : adresse de la zone mémoire
          // &ptr[0] : adresse du premier de la zone mémoire
          // &ptr[1] : adresse du second de la zone mémoire
          
          // invalide
          // ---------------------------------------------
          // var : c'est pas un adresse
          //
          // tab[0] : c'est pas une adresse
          // tab[] : c'est pas valide ( ça compile pas )
          //
          // &ptr : adresse du pointeur sur la zone mémoire != adresse de la zone mémoire
          // ptr[0] : c'est pas une adresse
          // ptr[] : c'est pas valide ( ça compile pas )



          -
          Edité par ox223252 11 juillet 2018 à 8:17:40

          • Partager sur Facebook
          • Partager sur Twitter

          la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

          Mon GitHub

            11 juillet 2018 à 10:41:21

            ox223252 a écrit:

            Pour continuer ce que dit Marc Mongenet scanf demande toujours des pointeurs comme arguments, donc :

            int var;
            int tab[10];
            int *ptr = malloc ( sizeof ( int ) * 10 );
            
            
            // adresses
            // ---------------------------------------------
            // &var : adresse de type int* de la variable var
            //
            // tab : adresse de type int* du premier élément du tableau
            // &tab : adresse de type int(*)[10] du tableau
            // &tab[0] : adresse de type int* du premier élément du tableau
            // tab + 1 : adresse de type int* du second élément du tableau
            // &tab[1] : adresse de type int* du second élément du tableau
            //
            // ptr : adresse de type int* du premier int de la zone mémoire
            // &ptr[0] : adresse de type int* du premier int de la zone mémoire
            // ptr + 1 : adresse de type int* du second int de la zone mémoire
            // &ptr[1] : adresse de type int* du second int de la zone mémoire
            
            
            Hello, j'ai ajouté quelques compléments et précisions.
            • Partager sur Facebook
            • Partager sur Twitter

            scanf et tableau

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown