OVH Cloud OVH Cloud

allocation dynamique d'un pointeur

56 réponses
Avatar
prat
bonjour,

J'ai vu dans un bouquin de cours de langage C sur les pointeurs
l'algorithme suivant:

main( )
{
float * pr1,*pr2,*pr3,somme=3D0;


/*allocation dynamique */
pr1=3Dmalloc(sizeof(float));
pr2=3Dmalloc(sizeof(float));
pr3=3Dmalloc(sizeof(float));

/*saisie*/
printf("Entrez 3 notes: ");
scanf("%f %f %f ",pr1,pr2,pr3);

/*calcul de la somme*/
somme=3D*pr1+ *pr2+ *pr3;

/*calcul de la moyenne*/
printf("Moyenne :%f \n ",somme/3);

/*liberation de la m=E9moire*/
free(pr1);
free(pr2);
free(pr3);

}

Mes questions sont:
-les pointeurs ont =E9t=E9 d=E9clar=E9 initialement =E0 la premi=E8re
instruction,pourquoi en plus une allocation dynamique avec malloc( ) et
free( )?Est-elle n=E9cessaire?
-aurai-je pu utiliser l'allocation dynamique sans avoir au pr=E9alable
d=E9clar=E9 mes pointeurs comme =E0 la premi=E8re instruction?


merci.

6 réponses

2 3 4 5 6
Avatar
Pascal Bourguignon
Marc Boyer writes:
Je ne fais pas de l'abstraction theorique (cf les mail de Gaby sur
l'espace de nommage), et je refute l'idee que l'implantation
concrette soit accessible sans un bagage d'archi.


Oui, c'est surement nécessaire d'avoir une base d'archi, ÀMA.
[...]
Oui, c'est un peu comme ça ue je faisais mon cours. Et ca ne marche
pas. En vrac, comment lier cela a l'allocation dynamique, a
l'arithmetique des pointeurs, et pourquoi les variables locales
disparaissent, etc.


Je ne vais pas contester ton observation factuelle que ça ne marche
pas (avec un certain nombre d'étudiants), c'est toi le
spécialiste. ;-) Je mentionnerait juste que l'allocation dynamique et
l'arithmétique des pointeurs s'expliquent simplement dans le cadre de
ce modèle. Quand aux variables locales qui disparaissent, c'est une
question de compilateurs qui peut être abordée plus tard, lorsqu'ils
ont acquis les notions de base.


Entendons nous bien, je ne dis pas qu'il faille cacher tout
cela. on leur dit, plusieurs fois dans l'annee et dans divers
cours. Ce que je dis est que presenter les pointeurs comme
cela n'est pas tres efficace.


D'accord. Je ne peux pas juger de l'efficacité pédagogique, je ne
suis que programmeur, pas professeur.

--
__Pascal Bourguignon__ http://www.informatimago.com/

"A TRUE Klingon warrior does not comment his code!"

Avatar
Pascal Bourguignon
"Antoine Leca" writes:
Et si on veut accéder à un autre vecteur, qui se trouve en 1500, il
suffit de mettre à jour la case de l'adresse 2000 et y stocker 1500.


Et il est TRÈS simple d'expliquer que lorsque le pointeur est un char*, il
faut ajouter 500, et quand c'est un int*, il faut ajouter tantôt 250, et
tantôt 125.
Évidentissime.


Oui, une fois que la notion d'adresse et de pointeur est acquise, ce
détail du langage C peut être enseigné.

--
__Pascal Bourguignon__ http://www.informatimago.com/
The mighty hunter
Returns with gifts of plump birds,
Your foot just squashed one.


Avatar
Radamanthe
Marc Boyer wrote:
Marc Boyer wrote:
Et on rajoute 6h de cours et 6h de TD d'archi des ordis à l'emplois
du temps parce que le prof qui enseigne le C en a besoin pour
illustrer la notion de pointeur ? Ben non, on a pas assez d'heures à
l'emploi du temps pour jouer à ça.
Je vous comprends mais pour moi on n'échappe pas facilement au fait

qu'il faille un certain ordre dans la manière de faire comprendre.


Un enseignant ayant plus de bouteille que moi racontait que dans
les années 70-80, on enseignait le C *après* que les étudiants
sachant coder en assembleur, et la communauté était agité par
le débats du genre "comment peut on enseigner le C à des personnes
qui ne connaissent pas l'assembleur ?". Et ca discutait dur,
les anciens contre les modernes...

A ce jour, je ne connais pas de cursus où l'on fasse de la
maîtrise de l'assembleur un pré-requis.

Et il est vrai que certaines connaissances ont été perdues,
et que quand on code en C, on ne sait plus bien combien d'octet
de code vont être produits et en combien de cycle tout cela
s'exécutera (ce à quoi il semble qu'on était plus attentif
à une époque). Est-ce grave ?


Meuh nan. Ca forme juste de nouveaux développeurs qui, incapables de
trouver le moindre intérêt au C par rapport à d'autres langages,
inventent d'autre langages, comme Java où que sais-je :)



--
R.N.



Avatar
Marc Boyer
Le 23-01-2007, Pascal Bourguignon a écrit :
Marc Boyer writes:
On peut aussi ne pas avoir lu Balzac ou Hugo. Est-ce grâve?


Tout Balzac ou tout Hugo ou un peu de Balzac et un peu d'Hugo ?


Justement, l'avantage avec les écrivains morts, c'est qu'on peut lire
l'oeuvre complète. :-)


Le sens de mon propos était justement d'évoquer la question du
'dosage'. Un domaine est interessant: ou s'arrete la culture générale,
ou commence la spécialité, et comment fait on les équilibres
avec d'autres matières.

À mon avis, avoir programmé (et optimisé) quelques programmes en
assembleur tôt dans une vie de programmeur est un bagage culturel
important.


Qu'est-ce qu'un programmeur ?
Je ne forme pas des gens avec un diplome d'informatique, mais des
gens qui seront ammenees a programmer des choses dans leur specialite.

Donc, ils ont fait un peu d'assembleur, sans etre tout a fait
a l'aise avec. Je ne pense pas qu'ils aient optimise quoi que
ce soit.


Je ne demande pas forcément quelque chose de compliqué. Ce qui compte
c'est qu'ils aient eu l'occasion de fouiller dans le manuel de
référence d'un processeur, de compter le nombre de cycles que prend
leur petit programme, et qu'ils aient fait l'effort de trouver une
combinaison d'instructions plus rapide. Quitte à leur montrer ensuite
comment rendre le programme trois fois plus rapide avec deux fois
moins d'effort en implémentant un meilleur algorithme...


Avec les pipe-line, il me semble que la notion de nombre de cycle
devient très secondaire...
De toute façon, pour mes étudiants, je pense qu'il y aurait plein
de choses plus importantes à étudier en archi avant de parler du
nombre de cycle des instructions. Et en plus, on a déjà pas le temps.


Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)



Avatar
Marc Boyer
Le 23-01-2007, Pascal Bourguignon a écrit :
Marc Boyer writes:
Je ne fais pas de l'abstraction theorique (cf les mail de Gaby sur
l'espace de nommage), et je refute l'idee que l'implantation
concrette soit accessible sans un bagage d'archi.


Oui, c'est surement nécessaire d'avoir une base d'archi, ÀMA.


Mais jusqu'où va-t-on ? En gros, l'étudiant avec un QI de 150,
tu lui présentes les adressages immédiats, direct,
et indirect, puis tu expliques que les pointeurs, s'est un adressage
indirect, et il a compris.

Mes etudiants a moi sont normaux, entre la presentation d'un concept
en cours et son assimilation, il faut des TD. Et pour arriver a ce
qu'une notion vue dans un cours soit assez comprise pour pouvoir etre
reutilisée dans un autre, il faut beaucoup insister.
Dans leur cursus, mes etudiants ne sont pas assez a l'aise avec
l'adressage et les pointeurs pour que cela serve de base à la
presentation des pointeurs. Déjà que certains se demandent où sont
les registres dans la mémoire...

[...]
Oui, c'est un peu comme ça ue je faisais mon cours. Et ca ne marche
pas. En vrac, comment lier cela a l'allocation dynamique, a
l'arithmetique des pointeurs, et pourquoi les variables locales
disparaissent, etc.


Je ne vais pas contester ton observation factuelle que ça ne marche
pas (avec un certain nombre d'étudiants), c'est toi le
spécialiste. ;-) Je mentionnerait juste que l'allocation dynamique et
l'arithmétique des pointeurs s'expliquent simplement dans le cadre de
ce modèle.


Ah ? L'allocation dynamique s'explique simplement dans le cadre
de ce modèle ? Je demande à voir. Nous, on fait un TD en fin d'année
ou on implante un allocateur simple dans un tableau de char, et
ca leur parait pas évident du tout.

Quand aux variables locales qui disparaissent, c'est une
question de compilateurs qui peut être abordée plus tard, lorsqu'ils
ont acquis les notions de base.


Sauf que dès le début il faut leur donner les bonnes habitudes,
et que dès la première liste chainée qu'ils font, ils sont tentés
de déclarer une variable locale 'Cellule' au lieu de l'allouer
dynamiquement.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. André Maurois)


Avatar
Eric Levenez
Le 24/01/07 8:03, dans ,
« Marc Boyer » a écrit :

Avec les pipe-line, il me semble que la notion de nombre de cycle
devient très secondaire...


Oui, ce qui devient intéressant, c'est de chasser les bulles dans les
pipelines pour maximiser les perfs. À adapter à chaque modèle d'un CPU...

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

2 3 4 5 6