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 :

Langage C et variable


Sujet :

C

  1. #1
    Membre éclairé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 35
    Par défaut Langage C et variable
    Bonjour à tous
    Je travaille essentiellement en Arduino, et à force de chercher des réponses à un problème j'arrive au langage C.
    Voici le code qui va servir de base à mes question:

    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
    #include <stdio.h>
     
    void foo(int *a)
    {
     *a = 145; // On change ce qu'il y a à l'adresse de a
     printf("Foo: Variable a = %d\n", *a); // *a == 145
    }
     
    int main(void)
    {
     int a;
     
     a = 10;
     printf("Main: Variable a = %d\n", a); // a == 10
     foo(&a); // On passe l'adresse de a
     printf("Main: Variable a = %d\n", a); // a == 145
     return (0);
    }
    - Ma première question concerne le "&" dans ==> foo(&a); correspond t-il bien à l'adresse de la variable "a" ?
    - A quoi sert le "*" dans ==> void foo(int *a)
    - Et pour finir à quoi sert "int" dans ==> int main(void)
    - est ce que le "void" est indispensable dans ==> int main(void)

    Merci par avance

  2. #2
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 763
    Par défaut
    Hello,

    1) Oui, l'opérateur '&' fournit bien l'adresse de la variable qui le suit.
    2) L'opérateur '*' exprime le fait que l'on s'adresse au contenu pointé, et non au pointeur. Ecrire, dans foo(), a=145 est valide, mais c'est le pointeur qui est changé, pas la valeur pointée. Ça s'appelle le déréférencement.
    3) Un programme C renvoie une valeur à l'OS, qui peut alors être gérée par l'appelant1
    4) Non, le void n'est pas (plus) nécessaire. Mais je conseille de le mettre, comme dans toute fonction qui ne prend de paramètre, cela aide le compilateur dans sa recherche d'erreurs.

    1Edit: exemple basique:
    x.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main(void) {
        return(1);             // tester aussi return(0);
    }
    Appel de x.exe dans un batch xx.bat en ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    x
    if errorlevel 1 goto err
    echo x s'est terminé normalement
    goto eob
    :err
    echo Le return code de x est : %errorlevel%
    :eob

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 753
    Par défaut
    Pour compléter la réponse de @edgarjacobs

    2) l'étoile * dans le passage de paramètres veut dire qu'on attend 1 pointeur.
    l'étoile * dans la définition d'1 variable veut dire qu'on définit 1 pointeur.

    Pour le passage de paramètres, le pointeur sert à modifier 1 variable parce que le passage de paramètres en C est 1 passage par valeur (paramètre entrée - lecture seule)

    Par contre, l'étoile * permet également de déréférencer 1 pointeur (aller à l'adresse de la variable pour la modifier ou prendre sa valeur) *a = 145;.

    1) Et donc comme on attend 1 pointeur pour la fonction, alors on passe en paramètre l'adresse de la variable avec l'esperluète & foo(&a);.

    3) Pour le retour du main, dans la bibliothèque stdlib.h, tu as 2 valeurs : EXIT_SUCCESS et EXIT_FAILURE (<- 2 liens cplusplus.com en anglais)

    4) Le void dans le passage de paramètre permet d'empêcher que l'utilisateur de la fonction l'appelle avec des paramètres.
    Mais la vraie signature du main est : int main(int argc, char* argv[]), pour récupérer les paramètres lors de l'appel de l'exécutable.

  4. #4
    Membre éclairé

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2015
    Messages : 35
    Par défaut Merci
    Merci pour vos réponses (claires), c'est compliqué de découvrir toutes ces subtilités lorsque l'on se débrouille seul. (d’où l’intérêt de ces forums).

    Bon weekend à tous

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

Discussions similaires

  1. [langage] Probleme de variable transfert de contenu
    Par Ludo167 dans le forum Langage
    Réponses: 10
    Dernier message: 08/07/2004, 11h40
  2. [langage] Création de variable d'environnements
    Par Smaugg dans le forum Langage
    Réponses: 20
    Dernier message: 26/04/2004, 09h32
  3. [langage] incrementation de variable dans une boucle
    Par mimilou dans le forum Langage
    Réponses: 15
    Dernier message: 16/04/2004, 13h23
  4. Réponses: 2
    Dernier message: 04/01/2004, 15h14
  5. [langage] Passage de variables...
    Par martijan dans le forum Langage
    Réponses: 8
    Dernier message: 30/07/2003, 09h48

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