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 :

Ecriture de variable sur pointeur


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut Ecriture de variable sur pointeur
    Bonjour,

    Voici ma question, que signifie *lign = 0 et *colonn = 1 dans la fonction void suivante.
    On utilise ces 2 variables dans cette fonction mais es-ce un intiger ou un char.
    On dit que c'est un pointeur mais sur quoi es-ce que je pointe.
    Dans cette fonction je compte le nombre de ligne et de colonne d'un fichier csv.
    Ou alors es-ce que c'est un booléen.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    void fct_lignes_colonnes_csv(char* fichie, int *lign, int *colonn)
    {
        int caractereActuel = 0;
        int findeligne=0;
     
        *lign=0;
        *colonn=1;
     
        FILE* fichier = NULL;
        fichier = fopen("liste scooters.csv", "r+");
     
        if (fichier != NULL)
        {
            do
            {
                caractereActuel = fgetc(fichier);
                if(caractereActuel==';' && findeligne<1)
                {
                    (*colonn)++;
                }
                if(caractereActuel=='\n')
                {
                    findeligne++;
                    (*lign)++;
                }
            }
            while (caractereActuel != EOF);
            fclose(fichier);
        }
        else
        {  
            printf("Fichier introuvable");
            exit(0);
        }
    }
    Merci d'avance pour votre réponse.

  2. #2
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    Bonjour,

    si vous êtes un peu perdu, voici des explications sur le "passage par pointeur" :




    et si vous êtes complètement perdu, il faut revoir les bases d'abord :


  3. #3
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 225
    Points : 10 174
    Points
    10 174
    Par défaut
    *lign = 0 et *colonn = 1
    Cela signifie que ce que pointe lign , sera a zéro et colonn a 1.
    De façon plus explicite imaginant que lign fait 5000 , ben il écrira a adresse 5000 (et mettra ta valeur 0) , de même pour colonn.
    Pour le type tout les pointeurs feront 32 ou 64 bits en général (ça dépend des machines) , pour le type de pointeurs (genre char* ou int*) cela sert a comment on les lis/écris , on ne lit/écris pas la même façon un char que un int en général (sauf si on a un int de 1 octet).

    Personne pourra te dire sur quoi tu pointe exactement , ça dépend de ce qui mis en argument , mais c'est évidant que int *lign, int *colonn ont été mis en pointeur pour pouvoir les modifier pendant cette fonction.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 397
    Points : 23 761
    Points
    23 761
    Par défaut
    Bonjour,

    Citation Envoyé par Kumral Voir le message
    Bonjour,

    Voici ma question, que signifie *lign = 0 et *colonn = 1 dans la fonction void suivante.
    On utilise ces 2 variables dans cette fonction mais es-ce un intiger ou un char.
    On dit que c'est un pointeur mais sur quoi es-ce que je pointe.
    Regarde bien le début de ton code : ces pointeurs sont les paramètres de ta fonction.

    Dans l'entête de ta fonction, il est écrit « int *lign » et « int *colonn », donc on sait que ces pointeurs pointent des entiers. On procède de cette façon pour pouvoir passer à ta fonction des variables qui lui sont extérieures tout en lui permettant de les modifier en retour.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kumral Voir le message
    On dit que c'est un pointeur mais sur quoi es-ce que je pointe.
    Bonjour

    Tu pointes sur l'adresse que ta fonction à reçu. Et dans ce cas tu dois partir du principe que l'adresse reçue par la fonction est correcte c'est à dire que cette adresse est valide et correspond à une variable de type "int"

    Exemple simple

    Code c : 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
    void maj(int *pt, int val)
    {
        // On stocke la valeur reçue à l'adresse reçus
        *pt=val;
    }
     
    int main()
    {
        int i, j, k;
        maj(&i, 10);
        maj(&j, 20);
        maj(&k, 30);
        printf("i vaut %d\n", i);
        printf("j vaut %d\n", j);
        printf("k vaut %d\n", k);
    }

    Dans chacun des 3 cas, la fonction reçoit une adresse correcte (l'adresse d'une variable de type "int") donc elle peut y stocker les valeurs qu'elle veut...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2014
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 29
    Points : 16
    Points
    16
    Par défaut
    Merci CodeurPlusPlus pour ces vidéos très bien réalisé.

    Obsidian, oui, c'est bien ça, je doit faire le lien avec une autre fonction menu ou j'utilise la fonction fct_lignes_colonnes_csv.
    Merci de votre réponse, à présent je suis sur que je déclare ces 2 pointeurs dans
    le seul but de données à ma fonction menu l'emplacement de ces 2 pointeurs
    ce qui me permet de faire le lien via l'adresse de ces 2 pointeurs entre 2 fonctions distincts.

    C'est pour avoir l'emplacement de ces 2 paramètres que je déclare 2 pointeurs.
    C'est bien ça qui réalise le lien entre 2 fonctions distincts.

    Merci de votre réponse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/10/2008, 12h29
  2. Variable sur plusieurs ligne
    Par krfa1 dans le forum ASP
    Réponses: 5
    Dernier message: 20/04/2006, 10h26
  3. ajouter une variable sur un control
    Par gijy dans le forum MFC
    Réponses: 15
    Dernier message: 21/03/2006, 18h18
  4. pointeur sur pointeur
    Par gaut dans le forum C
    Réponses: 3
    Dernier message: 01/11/2005, 21h30
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

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