Question sur l'allocation dynamique

Fermé
chaa13 - 27 avril 2013 à 14:34
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 27 avril 2013 à 16:04
Bonjour,
Je vois dans certains programmse utilisant l'allocation dynamique pour les tableau ce genre de chose (exemple avec le tuto du site du zero) :
    int nombreDAmis = 5, i = 0;
    int* ageAmis = NULL;
    ageAmis = malloc(nombreDAmis * sizeof(int));
    scanf("%d", &ageAmis[i]);

Je ne comprend pas pourquoi pour le scanf on utilise "&" car ageAmis et un pointeur donc pas besoin d'un "&", de meme pour le "[i]" !

Merci d'avance !




3 réponses

jeremux Messages postés 58 Date d'inscription samedi 23 octobre 2010 Statut Membre Dernière intervention 30 mai 2013 4
Modifié par jeremux le 27/04/2013 à 15:12
Salut,

ageAmis[i] n'est pas un pointeur. Du coup &ageAmis[i] est un pointeur, ageAmis en est un également.

Un string dans l'array.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
27 avril 2013 à 15:59
Du coup &ageAmis[i] est un pointeur
Non &ageAmis[i] n'est pas un pointeur. Mais il est bien de type int * ;-)
0
A confirmer,
mais il me semble que c'est à cause des [].

Par ex :
int tab[10];

tab tout seul sera évalué comme un pointeur sur son premier élément, tab[2] représente "la variable" située à l'adresse du premier élément de tab[10] + 2.
En clair tab[2] est équivalent à *(tab + 2).

Dans ton cas ageAmis[i] est équivalent à *(ageAmis + i) et représente donc une "variable", et tu dois donc passer l'adresse de cette variable à scanf.
Tu pourrais aussi bien écrire
scanf("%d", (ageAmis + i));


J'espère que c'est assez clair, et j'espère aussi ne pas avoir dit de grosses bêtises :p
0
jeremux Messages postés 58 Date d'inscription samedi 23 octobre 2010 Statut Membre Dernière intervention 30 mai 2013 4
Modifié par jeremux le 27/04/2013 à 15:25
c'est clair je trouve :)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
27 avril 2013 à 16:04
tab tout seul sera évalué comme un pointeur sur son premier élément,
Formuler comme ça, je ne suis pas d'accord. tab est bien un tableau (qui n'est pas un pointeur) c'est dans les expressions qu'il est transformé (à 3 exceptions près que tu avais clairement formulées dans un post ;-)). La nuance est très légère, mais importante. SInon parfait pour le reste :-).
Tu pourrais aussi bien écrire
scanf("%d", (ageAmis + i));

Tu peux même aller encore plus loin : scanf("%d", ageAmis + i);

Cdlt,
0
Merci !
Donc vous voulez dire que si je prends un pointeur qu'avec un malloc je lui alloue 4 case mémoire (chaque valeur et un char), on est d'accord que pour connaitre la valeur de chaque case je ferai ou : *pointeur[i] en incrementen le i a chaque fois, ou en faisant : pointeur + i ? donc a partir du moment ou je met le [i] mon compilateur transforme le pointeur en tableau ??

Merci d'avance !
0