Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pointeurs et variables globales.

    26 janvier 2006 à 17:57:36

    Salut à tous!

    Voilà, j'en viens à me poser une petite question, après avoir lu le derniere chapitre du cours à savoir: "les pointeurs".

    Peut-être que ma réfléxion est absurde, c'est vous qui me le direz :D

    Alors voilà, si j'ai 2 pointeur, je peux opérer sur 2 variable à l'aide de mes fonctions qui ne nécessitent que les adresses de mes variables comme arguments (soit mes 2 pointeurs). Je peux donc aller de fonctions en fonctions et souhaitant opérer sur les valeur de mes variables, je n'ai besoin de que mes pointeurs. Ainsi, dans ma fonction principale où a été initialisé mes variables, les modifications prennent effets, leurs valeurs ont changé.

    Alors en quoi les pointeurs sont-ils utiles à ce niveau? 2 variable globale ne suffiraient-elle pas amplement?
    Mais peut-être est-ce dû au fait que l'utilisation de variables globales ralenti plus le programme que le fait d'utiliser les pointeurs...

    J'ai essayé d'être assez explicite mais j'avoue que mes explications sont assez confuses.
    J'espère que vous me comprendrez.

    Merci. :)

    • Partager sur Facebook
    • Partager sur Twitter
      26 janvier 2006 à 18:20:43

      Les variables globales on évite à moins d'avoir une bonne raison, ça ne rend pas un code facile à lire ("ah... il faut donc comprendre qu'on utilise la variable globale déclarée 150 lignes plus haut ?"), ça "cache" les effets de bords à la lecture, et ce n'est pas économe en mémoire par rapport aux pointeurs dans la plupart des cas.

      Si les variables sont utilisées tout au long de l'exécution du script (c'est peut-être ton cas), utiliser des variables globales n'est pas une mauvaise chose, elles sont là pour ça.
      Si la portée est plus limitée... pointeurs, oui.
      • Partager sur Facebook
      • Partager sur Twitter
        26 janvier 2006 à 18:21:00

        Les variables globales sont en général à éviter, pour ne pas créer de conflits de nom.
        Dans des petits programmes, ça peut ne pas poser trop de problèmes, mais si on commance à utiliser des librairies,le debuggage peu rapidement devenir apocalyptique.

        Il y a une solution intermédiaire, me semble-t-il, qui consiste à faire précéder la déclaration de la variable par le mot-clé "static":


        static int ma_var;


        ma_var ne sera globale que dans le fichier dans lequel elle est déclarée.
        • Partager sur Facebook
        • Partager sur Twitter
          26 janvier 2006 à 18:23:26

          Bah : Tu n'as pas forcément besoin tout le temps de ces variables donc leur donner une durée de vie si importante est dérisoire. De plus, il y a pas mal de problèmes avec les variables globales :
          Si tu travailles en multithreadé, faut locker/synchroniser tes variables locales avant d'y écrire.
          Si tu appelles plusieurs fois ta fonction de suite, ça écrase l'ancien résultat, etc. Ta fonction ne peut pas s'appeler elle-même récursivement de manière utile dans la pluaprt des cas avec variables globales.
          Voilà en gros...
          Les perfs ne sont pas un problème et la comparaison pointeur/var globale en perf est assez complexe et il en sort que généralement : Ca dépend de trop de facteurs de nos jours mais on miserait bien sur un pointeur plutôt qu'une variable globale, pour les autres raisons également.
          En plus, les pointeurs ont des avantages : C'est beaucoup plus flexible, tu peux faire écrire un peu n'importe où ou juste choisir de ne pas écrire du tout si le pointeur est NULL. D'un autre côté, l'usage d'une variable statique/globale a l'avantage de rendre l'interface de la fonction plus simple ; ce qui est simple/élégant *est* bien, mais faut voir en fonction de ce dont on a besoin.
          • Partager sur Facebook
          • Partager sur Twitter
            26 janvier 2006 à 18:35:37

            Ok, merci beaucoup.

            Si je vous demande ça c'est parce que en SDL un problème se pose:

            Soit je déclare une dizaine de variables globales pour mes SDL_Surface et mes SDL_Rect, soit je crée beaucoup de pointeurs et mes fonctions deviennent :
            void affichage(SDL_Surface *Screen, SDL_Surface *rectangle, SDL_Surface *sprite, int *x, int *y, int iMousex, int iMouseY);


            Bon, de plus j'ai réussi à déclarer toutes mes SDL_Surface dans ma fonction main et mettre les arguments adéquats dans mes fonctions, facile les SDL_Surface sont des pointeurs. Mais pour mes SDL_Rect ça commence à être compliqué, puis en SDL le programme devient vite long, les fonctions se multiplient et avec tous ses arguments, les problèmes de portées etc., je commence à ne plus m'en sortir.

            Est-il préférable de laisser mes SDL_Surface et mes SDL_Rect, tout au moins, en variable globale, même si je ne tarderai pas à en avoir une dizaine?
            • Partager sur Facebook
            • Partager sur Twitter
              26 janvier 2006 à 18:51:20

              C'est pour ça que les struct existenet. :p
              • Partager sur Facebook
              • Partager sur Twitter
                26 janvier 2006 à 20:05:27

                Tu veux dire qu'elle sont faites pour être utilisé en variables globales?
                • Partager sur Facebook
                • Partager sur Twitter
                  26 janvier 2006 à 20:13:27

                  Non, mais pour regrouper des variables et éviter que ce soit le bordel dans les prototypes de fonction...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Pointeurs et variables globales.

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown