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
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
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
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.
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.
L'internet c'est parti pour 1000 ans !
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub