éternel débutant en C pour mon plaisir, je me permets de venir vous
demander quelques éclaircissements sur une situation que je n'arrive pas
à comprendre :
J'utilise le cours en ligne spécial "grand débutant" du "site du zéro" :
<http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html>
Je réalise les exercices du cours dans deux environnements différents :
- sous windows vista avec l'IDE visual C++ 2008 express
- sous linux ubuntu 9.04 avec gcc
J'ai écrit un programme dans le cadre des exercices proposés sur les
tableaux par ce cours en ligne. Le fichier en question peut être
téléchargé ici :
< http://dl.free.fr/to7PFReLM/tableau.c>
Ce qui m'étonne, c'est que j'arrive à compiler sans difficulté ce code
sous Linux, et que le programme se comporte exactement comme je le
souhaite. Par contre, sous Windows, impossible de compiler, l'IDE me
renvoie 42 erreurs et 31 avertissements !!! La plupart des erreurs
semblent être liées aux variables. Par exemple :
"erreur de syntaxe : absence de ';' avant 'type'"
"identificateur non déclaré"
Or, j'ai beau lire et relire mon code, les variables me sembles toutes
déclarées correctement et il ne manque à mon sens pas de ";" en fin
d'instructions. De plus, comme je le disais au début, le même code se
compile sans aucune erreur sous Linux ...
Alors, comment expliquer que deux compilateurs réagissent aussi
différemment, et où et mon erreur ?
Merci par avance du temps que vous pourrez me consacrer,
C'est en effet un problème: dans une promo classique, il y a 20% qui comprend du premier coup (et à du mal à comprendre que les autres puissent ne pas comprendre), et les autres. Que fait-on des autres ?
Marc Boyer
Comme dans beaucoup de cas... on les laisse tomber...
Marc Boyer a écrit :
C'est en effet un problème: dans une promo classique,
il y a 20% qui comprend du premier coup (et à du mal à
comprendre que les autres puissent ne pas comprendre),
et les autres.
Que fait-on des autres ?
Marc Boyer
Comme dans beaucoup de cas... on les laisse tomber...
C'est en effet un problème: dans une promo classique, il y a 20% qui comprend du premier coup (et à du mal à comprendre que les autres puissent ne pas comprendre), et les autres. Que fait-on des autres ?
Marc Boyer
Comme dans beaucoup de cas... on les laisse tomber...
Marc Boyer
Le 11-09-2009, David Remacle a écrit :
Marc Boyer a écrit :
C'est en effet un problème: dans une promo classique, il y a 20% qui comprend du premier coup (et à du mal à comprendre que les autres puissent ne pas comprendre), et les autres. Que fait-on des autres ?
Comme dans beaucoup de cas... on les laisse tomber...
C'était pas comme ça que je voyais mon metier d'enseignant, mais c'est plus simple en effet.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Le 11-09-2009, David Remacle <dremacle@NOSpamfree.fr> a écrit :
Marc Boyer a écrit :
C'est en effet un problème: dans une promo classique,
il y a 20% qui comprend du premier coup (et à du mal à
comprendre que les autres puissent ne pas comprendre),
et les autres.
Que fait-on des autres ?
Comme dans beaucoup de cas... on les laisse tomber...
C'était pas comme ça que je voyais mon metier d'enseignant,
mais c'est plus simple en effet.
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
C'est en effet un problème: dans une promo classique, il y a 20% qui comprend du premier coup (et à du mal à comprendre que les autres puissent ne pas comprendre), et les autres. Que fait-on des autres ?
Comme dans beaucoup de cas... on les laisse tomber...
C'était pas comme ça que je voyais mon metier d'enseignant, mais c'est plus simple en effet.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
bpascal123
> >> Que fait-on des autres ?
ILS NE PERDENT PAS DE TEMPS AVEC DES TRUCS INUTILES : below :
...en bref, de l'utilité d'apprendre les pointeurs ?
Pour les pointeurs, avec mon niveau, je ne comprends pas toujours leur utilité pour des programmes où les valeurs sont affectées directement aux variables.
C'est ça que je veux exprimer quand je parle de la présence de pointeurs ou non en C. Et je n'imagine pas un programme informatique sans variables. A mes yeux, un pointeur c'est une variable précédée par *., pas autre chose. Si on approfondi le concept, ok une variable en c est un pointeur mais mes connaissances sont limitées. Les variables dans les autres langages sont-elles également des pointeurs? Si pointeurs il y a.
Pourquoi faire compliquer quand on peut faire simple :
Pour illustration :
int n ;
int T[n] ;
...
printf("Element %d : ", cnt++) ;
scanf("%d", &*(T+i) ) ;
...
ou :
int n ;
int T[n] ;
...
printf("Element %d : ", cnt++) ;
scanf("%d", &T[i]) ;
...
C'est exactement la même chose, non?
Maintenant je comprends que si on déclare
int n ;
int T[n] ;
int *ptr = T;
...scanf peut devenir :
scanf("%d", ptr++) ;
Mais je ne vois toujours pas l'utilité de ptr++ sauf qu'il y a moins de combinaisons avec les touches du clavier...
Cependant, je peux me dire que c'est utile pour ce genre de choses que j'ai compris au bout de 2 mois au hasard d'une page web :
int n ;
int T[n] ;
int *ptr = T;
int m ;
int U[m] ;
int *ptr2 = U ;
...
while (*ptr2++ = *ptr++) ;
=>while copie les éléments de T vers U comme si on traduit un poème classique en message sms dans un forum 12-25 ans. Cette petite astuce ne peut pas se faire avec des variables sans * ? Je veux pas m'avancer et dire sans pointeurs car à chaque fois on me reprend pour me marteler qu'en c chaque variable est un pointeur.
while (T[n])
U[m++] = T[n++] ;
revient au même résultat?
Alors pour du code de ce niveau, pourquoi utiliser des variables de variables ???
Pascal
> >> Que fait-on des autres ?
ILS NE PERDENT PAS DE TEMPS AVEC DES TRUCS INUTILES : below :
...en bref, de l'utilité d'apprendre les pointeurs ?
Pour les pointeurs, avec mon niveau, je ne comprends pas toujours leur
utilité pour des programmes où les valeurs sont affectées directement
aux variables.
C'est ça que je veux exprimer quand je parle de la présence de
pointeurs ou non en C. Et je n'imagine pas un programme informatique
sans variables. A mes yeux, un pointeur c'est une variable précédée
par *., pas autre chose. Si on approfondi le concept, ok une variable
en c est un pointeur mais mes connaissances sont limitées. Les
variables dans les autres langages sont-elles également des pointeurs?
Si pointeurs il y a.
Pourquoi faire compliquer quand on peut faire simple :
Pour illustration :
int n ;
int T[n] ;
...
printf("Element %d : ", cnt++) ;
scanf("%d", &*(T+i) ) ;
...
ou :
int n ;
int T[n] ;
...
printf("Element %d : ", cnt++) ;
scanf("%d", &T[i]) ;
...
C'est exactement la même chose, non?
Maintenant je comprends que si on déclare
int n ;
int T[n] ;
int *ptr = T;
...scanf peut devenir :
scanf("%d", ptr++) ;
Mais je ne vois toujours pas l'utilité de ptr++ sauf qu'il y a moins
de combinaisons avec les touches du clavier...
Cependant, je peux me dire que c'est utile pour ce genre de choses que
j'ai compris au bout de 2 mois au hasard d'une page web :
int n ;
int T[n] ;
int *ptr = T;
int m ;
int U[m] ;
int *ptr2 = U ;
...
while (*ptr2++ = *ptr++) ;
=>while copie les éléments de T vers U comme si on traduit un poème
classique en message sms dans un forum 12-25 ans. Cette petite astuce
ne peut pas se faire avec des variables sans * ? Je veux pas m'avancer
et dire sans pointeurs car à chaque fois on me reprend pour me
marteler qu'en c chaque variable est un pointeur.
while (T[n])
U[m++] = T[n++] ;
revient au même résultat?
Alors pour du code de ce niveau, pourquoi utiliser des variables de
variables ???
ILS NE PERDENT PAS DE TEMPS AVEC DES TRUCS INUTILES : below :
...en bref, de l'utilité d'apprendre les pointeurs ?
Pour les pointeurs, avec mon niveau, je ne comprends pas toujours leur utilité pour des programmes où les valeurs sont affectées directement aux variables.
C'est ça que je veux exprimer quand je parle de la présence de pointeurs ou non en C. Et je n'imagine pas un programme informatique sans variables. A mes yeux, un pointeur c'est une variable précédée par *., pas autre chose. Si on approfondi le concept, ok une variable en c est un pointeur mais mes connaissances sont limitées. Les variables dans les autres langages sont-elles également des pointeurs? Si pointeurs il y a.
Pourquoi faire compliquer quand on peut faire simple :
Pour illustration :
int n ;
int T[n] ;
...
printf("Element %d : ", cnt++) ;
scanf("%d", &*(T+i) ) ;
...
ou :
int n ;
int T[n] ;
...
printf("Element %d : ", cnt++) ;
scanf("%d", &T[i]) ;
...
C'est exactement la même chose, non?
Maintenant je comprends que si on déclare
int n ;
int T[n] ;
int *ptr = T;
...scanf peut devenir :
scanf("%d", ptr++) ;
Mais je ne vois toujours pas l'utilité de ptr++ sauf qu'il y a moins de combinaisons avec les touches du clavier...
Cependant, je peux me dire que c'est utile pour ce genre de choses que j'ai compris au bout de 2 mois au hasard d'une page web :
int n ;
int T[n] ;
int *ptr = T;
int m ;
int U[m] ;
int *ptr2 = U ;
...
while (*ptr2++ = *ptr++) ;
=>while copie les éléments de T vers U comme si on traduit un poème classique en message sms dans un forum 12-25 ans. Cette petite astuce ne peut pas se faire avec des variables sans * ? Je veux pas m'avancer et dire sans pointeurs car à chaque fois on me reprend pour me marteler qu'en c chaque variable est un pointeur.
while (T[n])
U[m++] = T[n++] ;
revient au même résultat?
Alors pour du code de ce niveau, pourquoi utiliser des variables de variables ???
C'est en effet un problème: dans une promo classique, il y a 20% qui comprend du premier coup (et à du mal à comprendre que les autres puissent ne pas comprendre), et les autres. Que fait-on des autres ?
Les pointeurs, c'est simple. C'est la gestion de la memoire qui est compliquee. Si tu expliques correctement comment ca marche, ca va mieux.
Apres, il y a les problemes d'indirection multiple. Le fait qu'en C, tout est passe par valeur, ca n'aide pas forcement. Il faut parfois faire la distinction entre ce qui se passe, et pourquoi on fait les choses. Par exemple,
void f(int *a);
et void g(int b[]);
sont strictement equivalents, mais peut-etre qu'on utilise la premiere pour faire f(&i) et la deuxieme pour g(t)...
D'ou une difference d'intention, meme si les mecanismes reels sont identiques.
J'ai vu pas mal de variantes de debutants paumes.
- il y a ceux qui n'essaient pas de comprendre, programmation technique Shadock, ca finira bien par marcher. Souvent issu du Java, ou le langage est suffisamment gentil pour les laisser survivre. - il y a ceux qui ont compris les pointeurs, mais pas la memoire, et qui du coup, declarent des pointeurs, mais oublient d'allouer de la memoire. - il y a ceux qui ont a peu compris, mais ont des soucis avec les indirections, et qui t'ecrivent du f(int ****a); et qui ont du mal avec les messages d'erreur du compilo. - il y a ceux qui ont compris comment ca marche, mais pas a quoi ca sert. Vu la tonne d'idiomes existants en C, faut leur fourguer des exemples raisonnables en pagaille. - et puis tous ceux qui n'ont pas eu "le declic". On ne sait pas s'ils l'auront un jour, mais pour l'instant, ils ne savent pas programmer, et tout ce qu'ils font, c'est trouver l'exemple qui ressemble le plus a ce qu'ils veulent faire, et esperent que ca va marcher.
Rien qu'avec cette nomenclature, on a quelques remedes... les deux cas qui m'embetent le plus sont les premieres et dernieres categories: motiver avec le baton ne fonctionne que tres mal. Pour le dernier cas, je ne connais aucune solution, a part exemples, exercices et encore exemples en esperant que ca finisse par se debloquer. Sans doute un manque notable d'empathie de ma part, etant tombe dans la marmitte quand j'etais petit.
In article <h8di13$tba$1@news.cict.fr>,
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> wrote:
C'est en effet un problème: dans une promo classique,
il y a 20% qui comprend du premier coup (et à du mal Ã
comprendre que les autres puissent ne pas comprendre),
et les autres.
Que fait-on des autres ?
Les pointeurs, c'est simple. C'est la gestion de la memoire qui est compliquee.
Si tu expliques correctement comment ca marche, ca va mieux.
Apres, il y a les problemes d'indirection multiple. Le fait qu'en C, tout est
passe par valeur, ca n'aide pas forcement. Il faut parfois faire la distinction
entre ce qui se passe, et pourquoi on fait les choses. Par exemple,
void f(int *a);
et
void g(int b[]);
sont strictement equivalents, mais peut-etre qu'on utilise la premiere pour
faire f(&i) et la deuxieme pour g(t)...
D'ou une difference d'intention, meme si les mecanismes reels sont
identiques.
J'ai vu pas mal de variantes de debutants paumes.
- il y a ceux qui n'essaient pas de comprendre, programmation technique
Shadock, ca finira bien par marcher. Souvent issu du Java, ou le langage
est suffisamment gentil pour les laisser survivre.
- il y a ceux qui ont compris les pointeurs, mais pas la memoire, et qui
du coup, declarent des pointeurs, mais oublient d'allouer de la memoire.
- il y a ceux qui ont a peu compris, mais ont des soucis avec les
indirections, et qui t'ecrivent du f(int ****a); et qui ont du mal avec
les messages d'erreur du compilo.
- il y a ceux qui ont compris comment ca marche, mais pas a quoi ca sert.
Vu la tonne d'idiomes existants en C, faut leur fourguer des exemples
raisonnables en pagaille.
- et puis tous ceux qui n'ont pas eu "le declic". On ne sait pas s'ils
l'auront un jour, mais pour l'instant, ils ne savent pas programmer, et
tout ce qu'ils font, c'est trouver l'exemple qui ressemble le plus a ce
qu'ils veulent faire, et esperent que ca va marcher.
Rien qu'avec cette nomenclature, on a quelques remedes... les deux cas qui
m'embetent le plus sont les premieres et dernieres categories: motiver avec
le baton ne fonctionne que tres mal. Pour le dernier cas, je ne connais
aucune solution, a part exemples, exercices et encore exemples en esperant
que ca finisse par se debloquer. Sans doute un manque notable d'empathie de
ma part, etant tombe dans la marmitte quand j'etais petit.
C'est en effet un problème: dans une promo classique, il y a 20% qui comprend du premier coup (et à du mal à comprendre que les autres puissent ne pas comprendre), et les autres. Que fait-on des autres ?
Les pointeurs, c'est simple. C'est la gestion de la memoire qui est compliquee. Si tu expliques correctement comment ca marche, ca va mieux.
Apres, il y a les problemes d'indirection multiple. Le fait qu'en C, tout est passe par valeur, ca n'aide pas forcement. Il faut parfois faire la distinction entre ce qui se passe, et pourquoi on fait les choses. Par exemple,
void f(int *a);
et void g(int b[]);
sont strictement equivalents, mais peut-etre qu'on utilise la premiere pour faire f(&i) et la deuxieme pour g(t)...
D'ou une difference d'intention, meme si les mecanismes reels sont identiques.
J'ai vu pas mal de variantes de debutants paumes.
- il y a ceux qui n'essaient pas de comprendre, programmation technique Shadock, ca finira bien par marcher. Souvent issu du Java, ou le langage est suffisamment gentil pour les laisser survivre. - il y a ceux qui ont compris les pointeurs, mais pas la memoire, et qui du coup, declarent des pointeurs, mais oublient d'allouer de la memoire. - il y a ceux qui ont a peu compris, mais ont des soucis avec les indirections, et qui t'ecrivent du f(int ****a); et qui ont du mal avec les messages d'erreur du compilo. - il y a ceux qui ont compris comment ca marche, mais pas a quoi ca sert. Vu la tonne d'idiomes existants en C, faut leur fourguer des exemples raisonnables en pagaille. - et puis tous ceux qui n'ont pas eu "le declic". On ne sait pas s'ils l'auront un jour, mais pour l'instant, ils ne savent pas programmer, et tout ce qu'ils font, c'est trouver l'exemple qui ressemble le plus a ce qu'ils veulent faire, et esperent que ca va marcher.
Rien qu'avec cette nomenclature, on a quelques remedes... les deux cas qui m'embetent le plus sont les premieres et dernieres categories: motiver avec le baton ne fonctionne que tres mal. Pour le dernier cas, je ne connais aucune solution, a part exemples, exercices et encore exemples en esperant que ca finisse par se debloquer. Sans doute un manque notable d'empathie de ma part, etant tombe dans la marmitte quand j'etais petit.
Marc Boyer
Le 11-09-2009, a écrit :
>> Que fait-on des autres ?
ILS NE PERDENT PAS DE TEMPS AVEC DES TRUCS INUTILES : below :
...en bref, de l'utilité d'apprendre les pointeurs ?
Pour les pointeurs, avec mon niveau, je ne comprends pas toujours leur utilité pour des programmes où les valeurs sont affectées directement aux variables.
Les pointeurs sont incontournables (ou très difficilement contournable) pour: 1) avoir un mode in/out dans les fonctions/sous-programme C 2) partager des donnée entre différentes parties du programme (genre maintenir une sequence triée par nom *et* par ID) 3) manipuler efficacement de grosses données 4) utiliser des données dont on ne connait pas le nombre à la compilation
C'est ça que je veux exprimer quand je parle de la présence de pointeurs ou non en C. Et je n'imagine pas un programme informatique sans variables. A mes yeux, un pointeur c'est une variable précédée par *., pas autre chose.
Non, car deux pointeur peuvent partager la même variable.
Si on approfondi le concept, ok une variable en c est un pointeur mais mes connaissances sont limitées. Les variables dans les autres langages sont-elles également des pointeurs?
Oui ou non. Ce dépend.
Pourquoi faire compliquer quand on peut faire simple :
Parce qu'on ne peut pas faire autrement.
Pour illustration :
int n ; int T[n] ;
C99 uniquement !
scanf("%d", &*(T+i) ) ;
De l'art de faire compliqué.
Cependant, je peux me dire que c'est utile pour ce genre de choses que j'ai compris au bout de 2 mois au hasard d'une page web :
int n ;
int T[n] ;
int *ptr = T;
int m ;
int U[m] ;
int *ptr2 = U ;
while (*ptr2++ = *ptr++) ;
Sans intérêt aucun justement (hormis de faire ouvrir des grands yeux aux débutants, et peut-être d'aider des compilos il fut un temps).
=>while copie les éléments de T vers U comme si on traduit un poème classique en message sms dans un forum 12-25 ans. Cette petite astuce ne peut pas se faire avec des variables sans * ?
int i; for (i=0 ; T[i] != 0 ; i++ ) { U[i]= T[i]; } U[i]= T[i];
Alors pour du code de ce niveau, pourquoi utiliser des variables de variables ???
Parce que dans la vraie vie, on passe des paramètres à modifier aux programmes, on alloue dynamiquement des variables dont on ne connait pas le nombre à la compilation, on partage des variables entre différentes structure, on trie de grosses données, et je ne parle même pas des pointeurs de fonctions.
Mais en effet, on peut faire les 30-50 premières heures de programmation sans faire de pointeur.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Le 11-09-2009, bpascal123@googlemail.com <bpascal123@googlemail.com> a écrit :
>> Que fait-on des autres ?
ILS NE PERDENT PAS DE TEMPS AVEC DES TRUCS INUTILES : below :
...en bref, de l'utilité d'apprendre les pointeurs ?
Pour les pointeurs, avec mon niveau, je ne comprends pas toujours leur
utilité pour des programmes où les valeurs sont affectées directement
aux variables.
Les pointeurs sont incontournables (ou très difficilement
contournable) pour:
1) avoir un mode in/out dans les fonctions/sous-programme C
2) partager des donnée entre différentes parties du programme
(genre maintenir une sequence triée par nom *et* par ID)
3) manipuler efficacement de grosses données
4) utiliser des données dont on ne connait pas le nombre
à la compilation
C'est ça que je veux exprimer quand je parle de la présence de
pointeurs ou non en C. Et je n'imagine pas un programme informatique
sans variables. A mes yeux, un pointeur c'est une variable précédée
par *., pas autre chose.
Non, car deux pointeur peuvent partager la même variable.
Si on approfondi le concept, ok une variable
en c est un pointeur mais mes connaissances sont limitées. Les
variables dans les autres langages sont-elles également des pointeurs?
Oui ou non. Ce dépend.
Pourquoi faire compliquer quand on peut faire simple :
Parce qu'on ne peut pas faire autrement.
Pour illustration :
int n ;
int T[n] ;
C99 uniquement !
scanf("%d", &*(T+i) ) ;
De l'art de faire compliqué.
Cependant, je peux me dire que c'est utile pour ce genre de choses que
j'ai compris au bout de 2 mois au hasard d'une page web :
int n ;
int T[n] ;
int *ptr = T;
int m ;
int U[m] ;
int *ptr2 = U ;
while (*ptr2++ = *ptr++) ;
Sans intérêt aucun justement (hormis de faire ouvrir des
grands yeux aux débutants, et peut-être d'aider des compilos
il fut un temps).
=>while copie les éléments de T vers U comme si on traduit un poème
classique en message sms dans un forum 12-25 ans. Cette petite astuce
ne peut pas se faire avec des variables sans * ?
int i;
for (i=0 ; T[i] != 0 ; i++ ) {
U[i]= T[i];
}
U[i]= T[i];
Alors pour du code de ce niveau, pourquoi utiliser des variables de
variables ???
Parce que dans la vraie vie, on passe des paramètres à modifier
aux programmes, on alloue dynamiquement des variables dont on ne
connait pas le nombre à la compilation, on partage des variables
entre différentes structure, on trie de grosses données, et je ne
parle même pas des pointeurs de fonctions.
Mais en effet, on peut faire les 30-50 premières heures de programmation
sans faire de pointeur.
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
ILS NE PERDENT PAS DE TEMPS AVEC DES TRUCS INUTILES : below :
...en bref, de l'utilité d'apprendre les pointeurs ?
Pour les pointeurs, avec mon niveau, je ne comprends pas toujours leur utilité pour des programmes où les valeurs sont affectées directement aux variables.
Les pointeurs sont incontournables (ou très difficilement contournable) pour: 1) avoir un mode in/out dans les fonctions/sous-programme C 2) partager des donnée entre différentes parties du programme (genre maintenir une sequence triée par nom *et* par ID) 3) manipuler efficacement de grosses données 4) utiliser des données dont on ne connait pas le nombre à la compilation
C'est ça que je veux exprimer quand je parle de la présence de pointeurs ou non en C. Et je n'imagine pas un programme informatique sans variables. A mes yeux, un pointeur c'est une variable précédée par *., pas autre chose.
Non, car deux pointeur peuvent partager la même variable.
Si on approfondi le concept, ok une variable en c est un pointeur mais mes connaissances sont limitées. Les variables dans les autres langages sont-elles également des pointeurs?
Oui ou non. Ce dépend.
Pourquoi faire compliquer quand on peut faire simple :
Parce qu'on ne peut pas faire autrement.
Pour illustration :
int n ; int T[n] ;
C99 uniquement !
scanf("%d", &*(T+i) ) ;
De l'art de faire compliqué.
Cependant, je peux me dire que c'est utile pour ce genre de choses que j'ai compris au bout de 2 mois au hasard d'une page web :
int n ;
int T[n] ;
int *ptr = T;
int m ;
int U[m] ;
int *ptr2 = U ;
while (*ptr2++ = *ptr++) ;
Sans intérêt aucun justement (hormis de faire ouvrir des grands yeux aux débutants, et peut-être d'aider des compilos il fut un temps).
=>while copie les éléments de T vers U comme si on traduit un poème classique en message sms dans un forum 12-25 ans. Cette petite astuce ne peut pas se faire avec des variables sans * ?
int i; for (i=0 ; T[i] != 0 ; i++ ) { U[i]= T[i]; } U[i]= T[i];
Alors pour du code de ce niveau, pourquoi utiliser des variables de variables ???
Parce que dans la vraie vie, on passe des paramètres à modifier aux programmes, on alloue dynamiquement des variables dont on ne connait pas le nombre à la compilation, on partage des variables entre différentes structure, on trie de grosses données, et je ne parle même pas des pointeurs de fonctions.
Mais en effet, on peut faire les 30-50 premières heures de programmation sans faire de pointeur.
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Marc Boyer
Le 11-09-2009, Marc Espie a écrit :
In article <h8di13$tba$, Marc Boyer wrote:
Le 11-09-2009, Stephane Legras-Decussy a écrit :
après etre à l'aise avec fonctions et pointeurs...
le débutant a peur des pointeurs, je ne sais pas pourquoi...
J'ai aussi du mal à comprendre. Encore que parfois...
il n'y a rien de compliqué, il suffit d'un seul exemple pour comprendre, c'est la fonction qui échange 2 nombres... j'ai compris les pointeurs en 1 heure ya 20 ans avec ça...
C'est en effet un problème: dans une promo classique, il y a 20% qui comprend du premier coup (et à du mal à comprendre que les autres puissent ne pas comprendre), et les autres. Que fait-on des autres ?
Les pointeurs, c'est simple. C'est la gestion de la memoire qui est compliquee. Si tu expliques correctement comment ca marche, ca va mieux.
Voui, mais ça prend plus d'une heure.
Apres, il y a les problemes d'indirection multiple. Le fait qu'en C, tout est passe par valeur, ca n'aide pas forcement. Il faut parfois faire la distinction entre ce qui se passe, et pourquoi on fait les choses. Par exemple,
void f(int *a); et void g(int b[]);
sont strictement equivalents, mais peut-etre qu'on utilise la premiere pour faire f(&i) et la deuxieme pour g(t)...
Voui, la conversion implicite tableau -> ptr...
J'ai vu pas mal de variantes de debutants paumes.
- il y a ceux qui n'essaient pas de comprendre, programmation technique Shadock, ca finira bien par marcher. Souvent issu du Java, ou le langage est suffisamment gentil pour les laisser survivre. - il y a ceux qui ont compris les pointeurs, mais pas la memoire, et qui du coup, declarent des pointeurs, mais oublient d'allouer de la memoire. - il y a ceux qui ont a peu compris, mais ont des soucis avec les indirections, et qui t'ecrivent du f(int ****a); et qui ont du mal avec les messages d'erreur du compilo. - il y a ceux qui ont compris comment ca marche, mais pas a quoi ca sert. Vu la tonne d'idiomes existants en C, faut leur fourguer des exemples raisonnables en pagaille. - et puis tous ceux qui n'ont pas eu "le declic". On ne sait pas s'ils l'auront un jour, mais pour l'instant, ils ne savent pas programmer, et tout ce qu'ils font, c'est trouver l'exemple qui ressemble le plus a ce qu'ils veulent faire, et esperent que ca va marcher.
Rien qu'avec cette nomenclature, on a quelques remedes... les deux cas qui m'embetent le plus sont les premieres et dernieres categories: motiver avec le baton ne fonctionne que tres mal. Pour le dernier cas, je ne connais aucune solution, a part exemples, exercices et encore exemples en esperant que ca finisse par se debloquer.
Oui, avec 5-6 TD + 5-6 TP, les étudiants qui bossent y arrivent. Après, ceux qui regardent de loin et se disent "ça va aller", oui, ils pleurent un peu en projet... Mais bon, ça plus le cours, ca fait une vingtaine d'heures pour arriver à ammener toutes les bonnes volontés. Et oui, il y a la minorité qui a compris la première heure qui trouve ça un peu long.
Non, le truc vraiment despespérant, c'est quand un étudiant s'acroche, que tu l'aides, qu'il a le déclic, super content, et que 4 semaines après, en projet, il refait les même bourdes... Comprendre *et* s'en souvenir...
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
Le 11-09-2009, Marc Espie <espie@lain.home> a écrit :
In article <h8di13$tba$1@news.cict.fr>,
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> wrote:
Le 11-09-2009, Stephane Legras-Decussy <I_love@Arol> a écrit :
après etre à l'aise avec fonctions et pointeurs...
le débutant a peur des pointeurs, je ne sais
pas pourquoi...
J'ai aussi du mal à comprendre. Encore que parfois...
il n'y a rien de compliqué, il suffit d'un seul exemple
pour comprendre, c'est la fonction qui échange
2 nombres... j'ai compris les pointeurs en 1 heure
ya 20 ans avec ça...
C'est en effet un problème: dans une promo classique,
il y a 20% qui comprend du premier coup (et à du mal à
comprendre que les autres puissent ne pas comprendre),
et les autres.
Que fait-on des autres ?
Les pointeurs, c'est simple. C'est la gestion de la memoire qui est compliquee.
Si tu expliques correctement comment ca marche, ca va mieux.
Voui, mais ça prend plus d'une heure.
Apres, il y a les problemes d'indirection multiple. Le fait qu'en C, tout est
passe par valeur, ca n'aide pas forcement. Il faut parfois faire la distinction
entre ce qui se passe, et pourquoi on fait les choses. Par exemple,
void f(int *a);
et
void g(int b[]);
sont strictement equivalents, mais peut-etre qu'on utilise la premiere pour
faire f(&i) et la deuxieme pour g(t)...
Voui, la conversion implicite tableau -> ptr...
J'ai vu pas mal de variantes de debutants paumes.
- il y a ceux qui n'essaient pas de comprendre, programmation technique
Shadock, ca finira bien par marcher. Souvent issu du Java, ou le langage
est suffisamment gentil pour les laisser survivre.
- il y a ceux qui ont compris les pointeurs, mais pas la memoire, et qui
du coup, declarent des pointeurs, mais oublient d'allouer de la memoire.
- il y a ceux qui ont a peu compris, mais ont des soucis avec les
indirections, et qui t'ecrivent du f(int ****a); et qui ont du mal avec
les messages d'erreur du compilo.
- il y a ceux qui ont compris comment ca marche, mais pas a quoi ca sert.
Vu la tonne d'idiomes existants en C, faut leur fourguer des exemples
raisonnables en pagaille.
- et puis tous ceux qui n'ont pas eu "le declic". On ne sait pas s'ils
l'auront un jour, mais pour l'instant, ils ne savent pas programmer, et
tout ce qu'ils font, c'est trouver l'exemple qui ressemble le plus a ce
qu'ils veulent faire, et esperent que ca va marcher.
Rien qu'avec cette nomenclature, on a quelques remedes... les deux cas qui
m'embetent le plus sont les premieres et dernieres categories: motiver avec
le baton ne fonctionne que tres mal. Pour le dernier cas, je ne connais
aucune solution, a part exemples, exercices et encore exemples en esperant
que ca finisse par se debloquer.
Oui, avec 5-6 TD + 5-6 TP, les étudiants qui bossent y arrivent. Après, ceux
qui regardent de loin et se disent "ça va aller", oui, ils pleurent un peu
en projet...
Mais bon, ça plus le cours, ca fait une vingtaine d'heures pour arriver
à ammener toutes les bonnes volontés. Et oui, il y a la minorité qui a compris
la première heure qui trouve ça un peu long.
Non, le truc vraiment despespérant, c'est quand un étudiant s'acroche, que
tu l'aides, qu'il a le déclic, super content, et que 4 semaines après, en
projet, il refait les même bourdes...
Comprendre *et* s'en souvenir...
Marc Boyer
--
En prenant aux 10% des francais les plus riches 12% de leurs revenus,
on pourrait doubler les revenus des 10% les plus pauvres.
http://www.inegalites.fr/spip.php?article1&id_mot0
après etre à l'aise avec fonctions et pointeurs...
le débutant a peur des pointeurs, je ne sais pas pourquoi...
J'ai aussi du mal à comprendre. Encore que parfois...
il n'y a rien de compliqué, il suffit d'un seul exemple pour comprendre, c'est la fonction qui échange 2 nombres... j'ai compris les pointeurs en 1 heure ya 20 ans avec ça...
C'est en effet un problème: dans une promo classique, il y a 20% qui comprend du premier coup (et à du mal à comprendre que les autres puissent ne pas comprendre), et les autres. Que fait-on des autres ?
Les pointeurs, c'est simple. C'est la gestion de la memoire qui est compliquee. Si tu expliques correctement comment ca marche, ca va mieux.
Voui, mais ça prend plus d'une heure.
Apres, il y a les problemes d'indirection multiple. Le fait qu'en C, tout est passe par valeur, ca n'aide pas forcement. Il faut parfois faire la distinction entre ce qui se passe, et pourquoi on fait les choses. Par exemple,
void f(int *a); et void g(int b[]);
sont strictement equivalents, mais peut-etre qu'on utilise la premiere pour faire f(&i) et la deuxieme pour g(t)...
Voui, la conversion implicite tableau -> ptr...
J'ai vu pas mal de variantes de debutants paumes.
- il y a ceux qui n'essaient pas de comprendre, programmation technique Shadock, ca finira bien par marcher. Souvent issu du Java, ou le langage est suffisamment gentil pour les laisser survivre. - il y a ceux qui ont compris les pointeurs, mais pas la memoire, et qui du coup, declarent des pointeurs, mais oublient d'allouer de la memoire. - il y a ceux qui ont a peu compris, mais ont des soucis avec les indirections, et qui t'ecrivent du f(int ****a); et qui ont du mal avec les messages d'erreur du compilo. - il y a ceux qui ont compris comment ca marche, mais pas a quoi ca sert. Vu la tonne d'idiomes existants en C, faut leur fourguer des exemples raisonnables en pagaille. - et puis tous ceux qui n'ont pas eu "le declic". On ne sait pas s'ils l'auront un jour, mais pour l'instant, ils ne savent pas programmer, et tout ce qu'ils font, c'est trouver l'exemple qui ressemble le plus a ce qu'ils veulent faire, et esperent que ca va marcher.
Rien qu'avec cette nomenclature, on a quelques remedes... les deux cas qui m'embetent le plus sont les premieres et dernieres categories: motiver avec le baton ne fonctionne que tres mal. Pour le dernier cas, je ne connais aucune solution, a part exemples, exercices et encore exemples en esperant que ca finisse par se debloquer.
Oui, avec 5-6 TD + 5-6 TP, les étudiants qui bossent y arrivent. Après, ceux qui regardent de loin et se disent "ça va aller", oui, ils pleurent un peu en projet... Mais bon, ça plus le cours, ca fait une vingtaine d'heures pour arriver à ammener toutes les bonnes volontés. Et oui, il y a la minorité qui a compris la première heure qui trouve ça un peu long.
Non, le truc vraiment despespérant, c'est quand un étudiant s'acroche, que tu l'aides, qu'il a le déclic, super content, et que 4 semaines après, en projet, il refait les même bourdes... Comprendre *et* s'en souvenir...
Marc Boyer -- En prenant aux 10% des francais les plus riches 12% de leurs revenus, on pourrait doubler les revenus des 10% les plus pauvres. http://www.inegalites.fr/spip.php?article1&id_mot0
candide
David Remacle a écrit :
Comme dans beaucoup de cas... on les laisse tomber...
dans la Garonne ... ;)
David Remacle a écrit :
Comme dans beaucoup de cas... on les laisse tomber...
Comme dans beaucoup de cas... on les laisse tomber...
dans la Garonne ... ;)
Gabriel Dos Reis
candide writes:
[...]
| Que tu dises qu'il faille arrêter _la programmation en C_, ça p ourrait se | discuter mais là tu y vas un peu fort là , je connais pas mal d' informaticiens | qui n'ont pas vraiment compris les pointeurs
| Que tu dises qu'il faille arrêter _la programmation en C_, ça p ourrait se
| discuter mais là tu y vas un peu fort là , je connais pas mal d' informaticiens
| qui n'ont pas vraiment compris les pointeurs
| Que tu dises qu'il faille arrêter _la programmation en C_, ça p ourrait se | discuter mais là tu y vas un peu fort là , je connais pas mal d' informaticiens | qui n'ont pas vraiment compris les pointeurs