A quoi sert le & devant un tableau?

Résolu/Fermé
alin - Modifié par alin le 1/06/2013 à 15:37
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 1 juin 2013 à 20:50
Bonjour,
voici un exple:

#define N 5
char T[N]; int i;
printf("introduire les elements du tableau");
for (i=0; i<=N; i++)
scanf("%c", &T[i]); //scanf("%c",T+i);


A quoi bon mettre & devant T ?
Aussi, pourquoi T+i est équivalent à &T[i] ?

merci

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
1 juin 2013 à 16:24
Le & n'est pas mis devant le tableau mais devant la case T[i] qui est un char.
Parce qu'en paramètre de scanf il faut donner un pointeur de la valeur à modifier.
Or T[i] est un char, il faut donc utiliser son pointeur associé : &T[i]

Ton code est équivalent à faire :

char c;
scanf("%c",&c);
T[i]=c;

Ensuite, les tableaux ont des espaces mémoires contiguës, c'est à dire que toutes les cases du tableau sont les unes après les autres en mémoire.
Donc si le tableau est référencé par le pointeur T, alors sa première case est pointé à la même adresse mémoire T (on peux aussi dire T+0), ensuite la case 1 du tableau est juste après la case 0, donc pointé par T+1, etc.
T+i est donc la ième adresse mémoire à côté de T, c'est à dire le pointeur de la case T[i], qui est donc équivalent à &T[i].
1
Je vous remercie infiniment, vous m'avez bien aidé!
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
1 juin 2013 à 20:50
KX a tout dit.
Je ferai donc juste part d'une erreur :
for (i=0; i<=N; i++)
Attention, le tableau T a N char et le tableau commence à l'indice 0. Le dernier indice est donc N-1.
Il faut donc mettre : for(i=0; i<N; i++)

Cdlt,
0