Programmation en C (pointeurs)

Répondre
Partager Rechercher
Pour Lemuel:

int * p;
int ** sp;

p=& sp ;

/* ceci est correct */

le & ça te permet de descendre d'une étoile dans la hiérarchie et de faire des égalités entre des pointeurs et des super pointeurs .
Citation :
Provient du message de Lango Silma

c'est pas compliqué quand tu l'as vu en cours. Et que tu as eu le temps d'y réfléchir souvent...
Je l'ai presenté il y a 3 semaines a des iut premiere année et ils l'ont compris directement, apparement Lemuel aussi a compris

Citation :
Ce n'est pas le plus important à maitriser pour bien programmer en c. D'ailleurs la position exacte dans la pile n'est pas spécifiée dans la norme c et est au choix du compilateur.
nous sommes donc parfaitement d'accord. D'ailleurs le but de mon exercice etait plus de souligner d'une part la difference qu'il y a entre l'adresse d'un pointeur et la valeur d'un pointeur (en montrant des &p ca fait reflechir sur la signification de &p et donc differencier &p de p, ce qui est autrement une erreur frequente), et d'autre part de montrer la difference qui existe entre int p[10] et int *p, bien que moralement les deux sont du meme type exactement. Cette histoire d'alignement n'est qu'un petit truc annexe sur lequel les etudiants butent et qu'il faut leur expliquer.

Sinon, a quoi ca sert de savoir un peu ce qui se passe en mémoire (meme si on peut vivre sans je suis parfaitement d'accord).

voila un code typique qui bug :

Code:
int main(void)
{
 int i;
 int tab[5];
 char *s = "blablabla\n";

 for(i = 0; i <= 5; i++) tab[i] = i;

 printf("avant\n");
 printf("%s\n", s);
 printf("apres\n");

 [...]
Et la la question qui tue de l'etudiant : pourquoi ca segfault dans un printf, c'est le bug de gcc ?
Citation :
Provient du message de cesarac



(heuresement que je suis né trop tard pour pas avoir connus le C)
Cest dans ces moments-là que tu apprécies de faire du Cobol ...
Sinon, à mon sens, ne pas connaître le C pour un programmeur est plus une lacune qu'autre chose.
Citation :
Provient du message de Kathandro
Cest dans ces moments-là que tu apprécies de faire du Cobol ...
Sinon, à mon sens, ne pas connaître le C pour un programmeur est plus une lacune qu'autre chose.
Ouh alors ça... des coups et des douleurs, comme qui dirait... je pense que le C n'est pas forcément ce qu'il y a de plus formateur en matière de programmation, trop permissif par certains côtés Maintenant, question pointeurs et allocation de mémoire, c'est sûrement le plus formateur... pour ceux qui aiment les erreurs de segmentation et passer des heures à retrouver les endroits où ils se sont emmêlés les pinceaux dans leurs allocations/désallocations de mémoire Sans oublier que ce langage est loin de permettre d'aborder tous les aspects de la programmation (objets, notamment). Et qu'on ne me parle de C++
J'en profite pour vous demander en vitesse, tant que vous êtes tous chauds, là.

Il y a encore un exercice sur les 15 que j'ai à faire, que je n'arrive pas à résoudre.
C'est toujours avec les pointeurs (vu que c'est la matière qu'on me demande d'étudier en ce moment).
Il parait tout bête, mais je n'arrive pas à le faire :

Citation :
Ecrire une fonction qui vérifie si un chiffre est un réel.
Si c'est le cas, la fonction renvoie 1, autrement, elle renvoie 0.
J'imagine qu'on doit faire un %1 pour vérifier . Si on a 0, c'est que le chiffre n'était pas réel... mais j'avoue être bloqué par l'aspect "pointeurs" de l'exercice...
Citation :
Provient du message de Foehn
je pense que le C n'est pas forcément ce qu'il y a de plus formateur en matière de programmation, trop permissif par certains côtés
Entièrement vrai.
Je conseille d'apprendre la programmation en Pascal et l'orienté-objet en Java. Ceci dit, une fois chose faite, apprendre le C/C++ est quasi indispensable puisque ces langages sont extrêmement répandus. Et à ce titre, c'est mal des les avoir oubliés
Citation :
Provient du message de Lemuel
J'en profite pour vous demander en vitesse, tant que vous êtes tous chauds, là.

Il y a encore un exercice sur les 15 que j'ai à faire, que je n'arrive pas à résoudre.
C'est toujours avec les pointeurs (vu que c'est la matière qu'on me demande d'étudier en ce moment).
Il parait tout bête, mais je n'arrive pas à le faire :

Citation :
Ecrire une fonction qui vérifie si un chiffre est un réel.
Si c'est le cas, la fonction renvoie 1, autrement, elle renvoie 0.
c'est l'énoncé exact ? (même en maths, «vérifier si un chiffre est réel», ça veut rien dire...)
et j'avoue pas comprendre ce que tu es censé faire...
Citation :
Provient du message de Mothra
La pureté a une forme, elle a un Symbole :

(

Faites du Lisp, ca c'est un beau langage
*se rappelle des indigestions de parenthèses*

Bouark !

Citation :
Provient du message de Corwin Elentári
Entièrement vrai.
Je conseille d'apprendre la programmation en Pascal et l'orienté-objet en Java. Ceci dit, une fois chose faite, apprendre le C/C++ est quasi indispensable puisque ces langages sont extrêmement répandus. Et à ce titre, c'est mal des les avoir oubliés
Comme toutes choses oubliées de ce type-là, je crois qu'il suffirait que je m'y remette pour que ça revienne vite C'est un peu comme le vélo... Même si quelques années de Delphi et de Java m'ont certainement rendu moins attentif sur certains points
Oui lol, c'est l'énoncé exact...
vérifier qu'un nombre est réel, c'est pas très logique...

Je suppose qu'elle a voulu dire : vérifier que tel numéro est en entier, dans ce cas, renvoyer 0
Si c'est pas un entier, ce n'est qu'un réel, dans ce cas, renvoyer 1
Citation :
Provient du message de Corwin Elentári
Entièrement vrai.
Je conseille d'apprendre la programmation en Pascal et l'orienté-objet en Java. Ceci dit, une fois chose faite, apprendre le C/C++ est quasi indispensable puisque ces langages sont extrêmement répandus. Et à ce titre, c'est mal des les avoir oubliés
tout à fait pas d'accord, enfin ça dépend pour qui.
Pour un étudiant en informatique, je pense que le c est le langage le plus important à maitriser, tout simplement car c'est LE langage utilisé en système, et que pour le maitriser il est nécéssaire de bien comprendre comment marche l'exécution d'un programme (pile, tas, appel de fonction, gestion de la mémoire, etc.)

Pour un langage plus haut niveau, je conseille plutôt caml, qui est à mon sens le meilleur langage haut niveau.
Citation :
Provient du message de Lemuel
Oui lol, c'est l'énoncé exact...
vérifier qu'un nombre est réel, c'est pas très logique...
faudrait savoir... chiffre ou nombre, c'est pas pareil...
nombre ça a déjà plus de sens. enfin en mathématiques tout au moins.

Citation :
Je suppose qu'elle a voulu dire : vérifier que tel numéro est en entier, dans ce cas, renvoyer 0
Si c'est pas un entier, ce n'est qu'un réel, dans ce cas, renvoyer 1
si j'ai bien compris, la question est écrire une fonction qui prend un flottant en argument et qui renvoie 0 si le nombre est entier et 1 sinon ? je vois pas le rapport avec les pointeurs...

PS : j'ai l'impression que tu mélanges 3 notions, à savoir chiffre, nombre et numéro... ces mots ne sont absolument pas synonymes.
C'est surtout que je m'embrouille avec tous ces énoncés, parce que je fais bien la distinction entre les 3

Je bosse depuis 8h ce matin, j'ai plus les idées très claires.

Je pense que je vais laisser ça de côté pour aujourd'hui
je retravaillerai là-dessus demain matin, quand ça sera plus clair.

En tout cas, je vous remercie encore pour l'aide que vous m'avez apporté.
Code:
int verif (float x)
{
     float **p[2];
     int j;
     j=x;
     &p[0]= x/2;
     &p[1]=&p[0]/10;
     if ((&p[1]=(j*0.05))
          return (0);
     return(1);
}
Je sais pas si c'est ce que tu cherches, mais bon, tu fais des test avec des chiffres ça doit donner quelque chose de bon...
Citation :
Provient du message de Lango Silma
Il est tard, c'est possible que je fasse des conneries, j'étais plus concentré sur comment voir que c'est un réel ou un entier que sur la forme, possible que j'ai fait des fautes effectivement...
Citation :
Provient du message de Lango Silma
tout à fait pas d'accord, enfin ça dépend pour qui.
Pour un étudiant en informatique, je pense que le c est le langage le plus important à maitriser, tout simplement car c'est LE langage utilisé en système, et que pour le maitriser il est nécéssaire de bien comprendre comment marche l'exécution d'un programme (pile, tas, appel de fonction, gestion de la mémoire, etc.)
Pour un langage plus haut niveau, je conseille plutôt caml, qui est à mon sens le meilleur langage haut niveau.
A vous lire vous ne m'avez pas vraiment compris
Citation :
posté par Lango Silma
Pour un langage plus haut niveau, je conseille plutôt caml, qui est à mon sens le meilleur langage haut niveau.
http://caml.inria.fr/gifs/JoeCaml.gif
Ah, le Caml...
Quelle puissance, quelle rigueur, quelle clarté ! Un vrai plaisir de programmer avec ce langage....
Dommage que la version que j'utilisais, il y a 3 ans (Caml Light 0.7 et quelques) ait été aussi lente...
Je ne sais pas ce qu'il en est actuellement...
Citation :
Provient du message de Eldarendil
http://caml.inria.fr/gifs/JoeCaml.gif
Ah, le Caml...
Quelle puissance, quelle rigueur, quelle clarté ! Un vrai plaisir de programmer avec ce langage....
Dommage que la version que j'utilisais, il y a 3 ans (Caml Light 0.7 et quelques) ait été aussi lente...
Je ne sais pas ce qu'il en est actuellement...
le ocaml se compile, et le code compilé est un peu moins rapide que du c compilé, et un peu plus rapide que du c++ compilé.

Question interpréteur, je ne connais pas «caml light», j'ai toujours utilisé ocaml mais je n'ai jamais eu de problèmes de vitesse...
Moi je trouve CaML un peu foure tout, il fait fonctionel, impératif Objet, la syntaxe en est peu precise, le compilateur souffre de bugs annoncés comme des "features" par les devs INRIA quand on leur signale (pour moi l'inference de type devrait marcher aussi avec les types polymorphes, c'est un bug que ca ne le fasse pas). Disons que CaML etait un beau langage dans sa version pure fonctionelle System-S (du fonctionnel a typage fort quoi). Mais dans sa version fourre tout degoutante je le trouve bof. A choisir je prefere Scheme.
Citation :
posté par de Mothra
[i]voila un code typique qui bug :

Code:
int main(void)
{
 int i;
 int tab[5];
 char *s = "blablabla\n";

 for(i = 0; i <= 5; i++) tab = i;

 printf("avant\n");
 printf("%s\n", s);
 printf("apres\n");

 [...]



Et la la question qui tue de l'etudiant : pourquoi ca segfault dans un printf, c'est le bug de gcc ?
Euh, pourquoi ça segfault madame la mite ?
Citation :
Provient du message de Ranfaroth
Euh, pourquoi ça segfault madame la mite ?
Parce que le tab[5] tape allègrement sur l'espace de stockage de la chaîne, puisqu'on ne lui a pas réservé de place à l'hôtel pour lui tout seul.

Mais bon, les souvenirs sont vagues, j'peux m'tromper
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés