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 :

Portée de variables et de fonction?


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut Portée de variables et de fonction?
    Bonjour,

    j'aurais besoin d'éclaircissement concernant les portees.

    Par exemple,si mon programme se définit comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int fonction(...)
    {
     if(...)
      {
       int i = 1;
       <...>
       }
     else
      {
       int i = 2;
       <...>
      }
    }
    Est ce que ceci est possible?

    De plus,si je recupere un tableau dans une boucle par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int fonction(...)
    {
    char **tableau1 = ....;
     if(...)
      {
       char **tableau2 = ....;
       <...>
       }
     else
      {
       int i = 2;
       <...>
      }
    }
    ESt ce que mon tableau "tableau2" peut etre utilise lorsque je quitte le if?

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Tes exemples montrent des variables a portee de bloc. C'est tres bien defini par le standard du langage C : ces variables n'existent qu'entre le debut { et la fin } du bloc qui les encadre.
    Les utiliser en dehors du bloc n'est pas permis et devrait causer une erreur de compilation.
    A part evidemment les variables globales, toutes les variables en C appartiennent a un bloc.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par DaZumba
    Tes exemples montrent des variables a portee de bloc. C'est tres bien defini par le standard du langage C : ces variables n'existent qu'entre le debut { et la fin } du bloc qui les encadre.
    Les utiliser en dehors du bloc n'est pas permis et devrait causer une erreur de compilation.
    A part evidemment les variables globales, toutes les variables en C appartiennent a un bloc.
    Ce qui veut dire que je pourrais pas utiliser mon "tableau2" une fois sortie du "if"?
    Pour pouvoir l'utiliser,il faut que je l'a définit en dehors des blocs comme "tableau1"?

    J'ai un autre question.
    J'ai une structure contenant un nom et une liste chainee.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct 
    {
    char *nom;
    Liste *liste;
    }Table;
    Je definis un tableau de Table -> Table *tab.
    Comment est ce qu'il faut que j'ecrive pour acceder au champ liste de Table ?

  4. #4
    Membre Expert
    Avatar de lakitrid
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    1 535
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 535
    Par défaut
    Citation Envoyé par Man_Utd
    Ce qui veut dire que je pourrais pas utiliser mon "tableau2" une fois sortie du "if"?
    Pour pouvoir l'utiliser,il faut que je l'a définit en dehors des blocs comme "tableau1"?
    Oui

    Citation Envoyé par Man_Utd
    J'ai un autre question.
    J'ai une structure contenant un nom et une liste chainee.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct 
    {
    char *nom;
    Liste *liste;
    }Table;
    Je definis un tableau de Table -> Table *tab.
    Comment est ce qu'il faut que j'ecrive pour acceder au champ liste de Table ?
    normalement :

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je definis un tableau de Table -> Table *tab
    tab ainsi déclaré est un pointeur, pas un tableau.
    Si ce pointeur contient l'adresse du premier élément d'un tableau (de structure Table), alors :
    tab[i] est une structure Table et
    tab[i].liste, le champ liste de cette structure Table

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Man_Utd
    Ce qui veut dire que je pourrais pas utiliser mon "tableau2" une fois sortie du "if"?
    Pour pouvoir l'utiliser,il faut que je l'a définit en dehors des blocs comme "tableau1"?
    C'est exact.

    Comment est ce qu'il faut que j'ecrive pour acceder au champ liste de Table ?
    Lorsque tu as une variable de type structure, on accede aux elements en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct my_struct my_var;
     
    my_var.toto = 2;
    Si la variable est un pointeur, la notation devient plus lourde:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct my_struct *my_var;
    /* my_var is allocated or initialised somewhere */
    (*my_var).toto = 2;
    Heureusement, les createurs du langage ont eu pitie des programmeurs et ont simplifie la notation:

  7. #7
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Et pour les fonctions utilisées à l'interieur d'un bloc,ça se passe comment ?

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Le C ne permet pas de definir une fonction a l'interieur d'une autre fonction. Le probleme de portee ne se pose donc pas. La seule necessite est de definir le prototype de la fonction avant de s'en servir. Egalement, les variables passees en argument ou dont la valeur est mise a jour par le retour d'une fonction suivent les memes regles que toutes les autres variables: en gros, il faut qu'elles existent...

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

Discussions similaires

  1. En C++ fonction sqlite3_exec probleme de portée de variable
    Par panthere noire dans le forum SQLite
    Réponses: 0
    Dernier message: 03/10/2010, 20h00
  2. Réponses: 4
    Dernier message: 22/02/2010, 01h13
  3. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  4. [PHP 5.3] Portée de variable: class > include > fonction
    Par Yanonix dans le forum Langage
    Réponses: 8
    Dernier message: 06/02/2009, 23h43
  5. Portée des variables et des fonctions
    Par Haze. dans le forum Général Python
    Réponses: 5
    Dernier message: 23/06/2007, 10h10

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