Les variables...

Résolu
lordfinalff Messages postés 84 Date d'inscription vendredi 2 septembre 2005 Statut Membre Dernière intervention 14 décembre 2009 - 14 déc. 2009 à 18:58
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 15 déc. 2009 à 00:05
Bonjour a tous et a toutes !
Voila la situation, j'ai commencé à apprendre le C pour programmer un PIC.
A la base, les cours nous faisait utiliser FlowCode, mais, ce dernier ne prennant pas en compte les tableaux multidimentionnels de variables, j'ai du me mettre au C ^^

Bon, un truc me chiffonne... J'ai abordé les pointeurs... Fameux pointeurs.. Je comprends le principe, je comprends le fonctionnement mais, sachant qu'en C ( comme en VB dans lequel je programme d'habitude ) il y a possibilité de déclarer nos variables en globale pour tout le fichier...
Or, dans le tutoriel que j'ai suivi, il déconseillait de le faire, et plutôt se servir des pointeurs pour manipuler des variable entre 2 fonctions...
Pourquoi donc ?
Je suppose qu'il doit y avoir une réel utilité sinon, on déclarerai simplement les variable en local, avant le main et ainsi, pas besoin de pointeurs pour les manipuler...

Je remercie ceux qui pourront répondre à cette question..

Lordfinalff.. bien embété par ces pointeurs...

2 réponses

uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 déc. 2009 à 00:05
Salut,
Hum, CptPingu a très bien résumé. N'oublie pas le "réponse acceptée" si tu as compris, ça évite aux autres utilisateurs de "perdre du temps" pour rien en lisant un topic déjà résolu.

Juste une petite précision au cas ou :
en C, pour modifier un paramètre (paramètre de sortie ou d'entrée/sortie), un passage par adresse (pointeur) est obligatoire, comme le montre l'exemple de CptPingu.
De plus, si tu as par exemple une structure, de 40octets, la passer en paramètre d'une fonction reviendrait à copier 40 octets dans une variable temporaire. Or passer son adresse revient à copier 4 octets seulement. Gain de rapidité, gain de mémoire.


Cordialement, uaip.
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
14 déc. 2009 à 20:35
Une variable globale, étant accessible partout, est fortement déconseillée (que ce soit en C, en VB ou autre d'ailleurs). C'est le meilleur moyen de produire du code spaghetti.

Le problème avec une variable globale, c'est que ça rend le code très difficile à maintenir. En appelant une fonction, tu ne sais pas si celle-ci va modifier ta variable globale ou non, et dans quelle mesure. C'est très bancale de s'appuyer là-dessus.
Comme toute fonctionnalité d'un langage, une fonctionnalité est là pour être utilisé, mais certaines sont à manipuler avec grande parcimonie.

Les pointeurs ne sont pas là pour émuler des variables globales, c'est un tout autre mécanisme. On peut très bien créer un code sans pointeur ni variable globale.

Dans le contexte dont tu parles, les pointeurs sont essentiellement utilisés pour éviter des copies inutiles, et être sur que l'on agit sur les variables passées en argument.

Petit exemple très simple:
#include <stdio.h>

void swap(int* a, int* b)
{
  int tmp = *a;
  *a = *b;
  *b = tmp;
}

int main(void)
{
  int var1 = 45;
  int var2 = 97;

  printf("%i %i\n", var1, var2);
  swap(&var1, &var2);
  printf("%i %i\n", var1, var2);

  return 0;
}


Si tu penses ne pas être assez à l'aise avec les pointeurs, voici un petit cours:
http://0217021.free.fr/Cours/pointeurs.pdf
0
Rejoignez-nous