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
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
A voir également:
- Question sur l'allocation dynamique
- Tableau croisé dynamique - Guide
- Liste déroulante dynamique excel - Guide
- Liste déroulante dynamique en cascade excel - Guide
- Le nom du champ de tableau croisé dynamique n'est pas valide - Forum Excel
- Impossible d'afficher le rapport de tableau croisé dynamique sur un rapport existant - Forum Bureautique
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
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.
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
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
Modifié par jeremux le 27/04/2013 à 15:25
c'est clair je trouve :)
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
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,
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 !
27 avril 2013 à 15:59
Non &ageAmis[i] n'est pas un pointeur. Mais il est bien de type int * ;-)