Bonjour,
étudiant au Cnam en informatique (études bac + 2) et ayant appris le java, je me suis mis au C depuis un mois par un livre. J'ai tenté de comprendre les principales différences entre le java et le C car je passe un concours IRTF en mai juin 2009 et on nous demande de savoir écrire en C. Je me donne donc 3-4 mois pour parvenir à savoir écrire en C, ayant déjà deux ans de programmation java derrière moi.
Mais voilà, je n'en reste pas moins un débutant en C, les notions de pointeurs sont nouvelles pour moi et je les découvre tout doucement.
Dans un des exercices du concours IRTF de 2007, on nous soumet le problème suivant:
Quelques erreurs me paraissent évidentes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Critiquez cet extrait de programme écrit en C: int *adv() { int i; return (&i); } main() { int *ia int b, c, d; ia = adv(); *ia = 0;
- l'accolade de fin manquant pour main()
- return 0 manquant à la fin du main()
- b, c et d sont déclarés (donc l'espace mémoire adéquat leur est réservé) mais ils ne sont pas utilisés. On ne leur attribue pas de valeur.
- absence de ; après int *ia
Et après, je commence à bloquer.
doit renvoyer un int. Or, ici, c'est l'adresse d'un int qui est renvoyé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int *adv() { int i; return (&i); }
Par contre, j'ai plein de questions:
- a t-on le droit d'écrire int *adv()? qu'est-ce que cela signifie?
- dans le main, que signifie chaque ligne?
Voici ce que je comprends:
Au final, comment ce programme peut être critiqué?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 main() { int *ia; /* pointeur ia déclaré*/ int b, c, d; /* déclaration de 3 variables */ ia = adv(); /* le pointeur pointe sur la fonction adv() */ *ia = 0; /* on attribue au pointeur ia la valeur 0*/ return 0; /* OK */}
Merci par avance pour votre aide,
Johnny
Partager