IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

les pointeurs en c


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut les pointeurs en c
    Bonsoir tout le monde,
    Actuellement je débute en C. En cours, nous avons vu la notion de pointeurs. j'ai compris que pour déclarer un pointeur il faut faire
    ceci veut dire que pour la variable a on peut donner que des adresses. Quand on veut écrire a l'intérieur d'une fonction il faut que je l'appelle avec Mon souci est que je ne vois pas son intérêt. Quelqu'un aurait la gentillesse de m'expliquer s'il vous plait merci.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    C'est a = &b, pas &a = b.

    L'intéret tu le verra très vite en programmant un peu. Essaie de recoder la fonction strcpy() par exemple. Les pointeurs c'est la notion la plus importante qui soit en C.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Par défaut
    l'intéret c'est que tu manipule la RAM
    l'intéret c'est que tu peu manipuler quelque chose sans la copier
    l'intéret c'est que c'est très puissant
    l'interet c'est que le principe d'adresse et de valeur est la base meme de l'informatique.
    l'interet: c'est ce qui permet de faire la différence entre le code et les données

    dire ceci:
    <code>&a = b;</code>

    Est absurde pour un esprit logique:

    &a est l'adresse d'un <<object>> dans la RAM ---> constante
    = ---> "lui attribuer une valeur qui est"
    b ---> "la valeur"
    Attribuer une valeur à une constante ? impossible
    c'est comme dire que 5 = 6
    5 est constant et il ne peut pas être modifier...

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par lapinoudu33 Voir le message
    l'intéret c'est que tu manipule la RAM
    Euh, non. Tu manipules de la mémoire. Point. Le C ne sait ce qu'elle est en réalité. Le C est un langage de haut niveau qui ne sait pas ce qu'est le matériel. Il communique avec lui via des abstractions comme la mémoire, justement et les I/O (flux d'octets).

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bolltt Voir le message
    Actuellement je débute en C. En cours, nous avons vu la notion de pointeurs.<...>Mon souci est que je ne vois pas son intérêt
    http://emmanuel-delahaye.developpez....util_pointeurs

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Par défaut
    mais RAM ne serait pas un abu de langage pour désignées des mémoires rapide et volatile?
    RAM étant définie de manière très stricte et en anglais s'il vous plaît comme étant: Random Access Memory soit c'est une "mémoire brouillon" en quelque sorte

    Je veux dire que RAM étant le terme pour parler de mémoire en générale et que c'est un abu de langage, non? (je bataille, je bataille xD)

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par lapinoudu33 Voir le message
    mais RAM ne serait pas un abu de langage pour désignées des mémoires rapide et volatile?
    RAM étant définie de manière très stricte et en anglais s'il vous plaît comme étant: Random Access Memory soit c'est une "mémoire brouillon" en quelque sorte
    Pourquoi 'brouillon' ? Rien à voir. Littéralement : Mémoire à accès aléatoire.

    Mais une fois de plus, le C ne sait pas ce qu'est la RAM... C'est une notion 'physique' de la mémoire qui lui est étrangé. Il ne connait que 'La Mémoire' qui est organisé en 2 types :

    1. La mémoire de donnée
      qui comprend 3 classes :
      1. Statique
      2. Automatique
      3. Allouée.
    2. La mémoire de code


    Je veux dire que RAM étant le terme pour parler de mémoire en générale et que c'est un abu de langage, non? (je bataille, je bataille xD)
    Chez toi, oui, ça à tout l'air d'un abus de langage...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 21
    Par défaut
    quel différence entre automatique et alloué?

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par lapinoudu33 Voir le message
    quel différence entre automatique et alloué?
    http://emmanuel-delahaye.developpez....es.htm#donnees

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut
    Re,
    Merci à vous tous. j'ai écrit que . Vous m'avez dit que c'est plutôt mais je ne sais pas comment on peut le savoir. Si j'ai bien compris, les pointeurs permettent d'éviter d'utiliser une variable intermédiaire si on veut échanger les deux valeurs.

  11. #11
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par lapinoudu33 Voir le message
    RAM étant définie de manière très stricte et en anglais s'il vous plaît comme étant: Random Access Memory soit c'est une "mémoire brouillon" en quelque sorte
    RAM est la mémoire vive, inscriptible et volatile, par opposition à ROM (Read Only Memory), immuable mais persistente. Ça, c'est la base :-)

    Maintenant, « mémoire à accès aléatoire » signifie que tu peux accéder à n'importe quel élément de manière complètement arbitraire et au même coût, ce qui est loin d'être le cas dans la plupart des structures de données en informatiques, qu'elles soient émulées par programmation au sein de ladite RAM (listes chaînées, piles ...) ou enregistrées sur des supports physiques.

    Une bande magnétique, par exemple, te permet a priori de retrouver n'importe quel élément n, mais t'oblige quand même à te palucher les n-1 éléments précédents dans l'ordre avant d'exhiber celui qui t'intéresse.

  12. #12
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par bolltt Voir le message
    Re,
    Merci à vous tous. j'ai écrit que . Vous m'avez dit que c'est plutôt mais je ne sais pas comment on peut le savoir
    De par sa connaissance du langage C...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /* a est une variable non initialisée de type un pointeur sur int. */
    int *a;
     
    /* b est une variable de type int */
    int b;
     
    /* pour initialiser un pointeur, il faut, par exemple, l'adresse d'une variable de même type. b est de type int. Son adresse est &b. On a le droit de mettre l'adresse de b dans a, car a est un pointeur sur int : */
     
    a = &b;
    Si j'ai bien compris, les pointeurs permettent d'éviter d'utiliser une variable intermédiaire si on veut échanger les deux valeurs.
    Non.

    http://emmanuel-delahaye.developpez.....htm#pointeurs

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut
    bonjour,
    Merci beaucoup votre explication. On me demande d'écrire un programme qui doit décomposer en facteur premiers d'un nombre entier de N. Exemple 60 = 2 * 2 * 3 *5 avec 2,3,5 qui sont des nombres premiers.

    Voila ce que j'ai trouvé mais c'est faux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include<stdio.h>
    int decomp(int N){
     int i,a,b;
     i=2;a=1;b=1;
       while(i<n){
         if( n%i ==0){
             a = n/i;
             b = i * 1;
          }
        else {
               i++;
        }
     return b;
     }
     
    int main(){
      printf("%d",decomp(60));
    return 0;
    }
    en exécutant j'obtiens 1. Quelqu'un peut m'expliquer pour que je puisse trouver la bonne réponse s'il vous plaît? Merci.

  14. #14
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Par défaut
    Premiere chose que je remarque, c'est que tu as comme parametre "N" , et après tu utilises "n". Si ma mémoire est bonne, le C fait la distinction entre majuscule, minuscule. Sinon, de toute facon, tu ferais mieux de l'écrire de la meme facon.

    Ensuite je vois pas trop la logique de ton algo. Ne serait ce que la spécification... Tu retournes un entier. Pour quelle raison? Tu dois bien donner les entiers qui décomposent le nombre, donc plusieurs entiers. Or tu n'en retournes qu'un seul, qui est b. Peut être retourner un tableau d'entiers, ou éventuellement provoquer un affichage sur l'écran.
    D'ailleurs écrire :
    est bizarre, autant affecter b à i directement, car une multiplication par 1, ca ne change rien ...

    Enfin regarde bien ton algo, il n'a pas beaucoup de sens. Ou du moins, j'aimerais connaitre le sens que tu lui donnes. Essaie de le faire sur papier avant, après tu le transcriras en C. Bon courage...

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut
    Re,

    Bon, je vous explique ce que je voulais faire. Dans un premier temps je voulais vérifier que n modulo i = 0. (avec i =2).
    Si cette condition est réalisée alors je vais diviser n par i et cette valeur je vais le stocker dans une variable locale. Et aussi je dois garder la valeur de i pour pouvoir faire le produit avec certaines valeurs de i.
    si non, j'incrémente le i de i++.

    A la fin, je vais faire un printf comme vous avez dit.

    De cette manière là que je vais décomposer en facteurs premiers. Quelqu'un peut m'aider à faire le programme s'il vous plaît?

Discussions similaires

  1. [LG]Les pointeurs: Forme en "Anneaux"
    Par k o D dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2004, 07h29
  2. Réponses: 4
    Dernier message: 13/08/2004, 18h39
  3. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31
  4. pointeurs, toujours les pointeurs :/
    Par giviz dans le forum C
    Réponses: 16
    Dernier message: 08/10/2003, 15h02
  5. Pb de débutant sur les pointeurs!!!
    Par benji17c dans le forum C
    Réponses: 6
    Dernier message: 30/09/2003, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo