Quel est la difference entre deux manières de passer une variable à une fonction

Bonjour à tous,

Il y a un truc que je n'arrive toujours pas à expliquer

En partant de ce code

char logitude[15];

void get_gps(char * longitude)
{
   // Code permettant de calculer la longitude
   
   Serial.print(F("Longitude1:"));
   Serial.println(longitude); La longitude est calculée et affichée
}

void getgps()
{
   // Code permettant de calculer la longitude
   
   Serial.print(F("Longitude2:"));
   Serial.println(longitude); La longitude est calculée et affichée
}


get_gps(longitude);
Serial.print(F("Longitude3:"));
Serial.println(longitude); 

getgps();
Serial.print(F("Longitude4:"));
Serial.println(longitude);

On est d'accord que dans les deux cas j'aurais les deux affichage puisqu longitude est variable global?

longitude1:46.00000
longitude2:46.00000
longitude3:46.00000
longitude4:46.00000

Quel est réellement la différence entre les deux?

Bonjour,

Je ne vois pas très bien ou tu veux en venir.

Dans le premier cas tu accèdes à la variable don l'adresse est passée en paramètre, dans le deuxième cas tu accèdes à la variable globale.

Dans tes exemples tu as une seule variable globale, donc ça peut sembler identique.
Mais si tu as deux variables longitude1 et longitude2, dans le premier cas tu n'as qu'à appeler get_gps(longitude1) ou get_gps(longitude2), ma-s dans le 2eme cas, il faut que tu réécrive une fonction get_gps2().

Bonjour,
Je ne comprends pas non plus ton code, mais je réponds à la question qui est claire !

Il y a deux façons de faire passer des informations à travers de fonctions :

  • par valeur
  • par référence
    Si tu tapes dans un moteur de recherche :
langage C passage par

tu trouveras plein d'info ex : un parmi d'autres
avec avantages et inconvénients...

Si ça peut t'aider, mais c'est du vite fait :

/*
 * Passage par valeur et passage par référence
 */

void setup() {
   Serial.begin(9600);
}

void loop() {

  char coord[15] = "3 42 27 E";
  char autre_coord[15] = "";
  
  Serial.print("Longitude initiale : ");
  Serial.println(coord);
  delay(1000);

  //Appel à une fonction qui retourne une valeur
  strcpy(autre_coord,LONGITUDE());
  Serial.print("Autre coord : ");
  Serial.println(autre_coord);
  delay(1000);
  
  //Appel à une fonction qui modifie la valeur d'une variable passée en paramètre
  LONGIT(coord);
  Serial.print("Longitude initiale MODIFIEE : ");
  Serial.println(coord);
  delay(1000);

  Serial.println("\n\n");
  delay(10000);
}

//Cette fonction retourne une valeur
char* LONGITUDE() {
  char longit[15] = "15 15 15 O";
  Serial.print("Coord dans fonction LONGITUDE : ");
  Serial.println(longit);
  return longit;
}

//Cette fonction ne retourne rien (void)
//Elle modifie la variable qu'on lui a passé
void LONGIT(char *cd) {
  strcpy(cd,"45 45 45 E");
  return;
}