Question sur l'allocation dynamique
chaa13
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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) :
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 !
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 !
A voir également:
- Question sur l'allocation dynamique
- Tableau croisé dynamique - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Liste déroulante dynamique excel - Guide
- Sommaire dynamique word - Guide
- Liste déroulante dynamique en cascade excel - Guide
3 réponses
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.
ageAmis[i] n'est pas un pointeur. Du coup &ageAmis[i] est un pointeur, ageAmis en est un également.
Un string dans l'array.
A confirmer,
mais il me semble que c'est à cause des [].
Par ex :
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
J'espère que c'est assez clair, et j'espère aussi ne pas avoir dit de grosses bêtises :p
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
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,
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,
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 !
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 !
Non &ageAmis[i] n'est pas un pointeur. Mais il est bien de type int * ;-)