Bonjour à tous, je suis débutant en programmation en C et j'ai une question sur le programme ci-dessous.

Résumé sur le programme :
  • composé de deux fonctions, la 1ere void initialise_Nb_jours() initialise un tableau avec le nombre de jours du mois { 31 28 31 30 31 30 31 31} .
  • la 2eme fonction void affiche() affiche le tableau initialisé par la fonction précédente.
  • les deux fonctions sont sans paramètres d'entrées et sans paramètres de sorties. Au début de la fonction main, j'ai appelé la fonction initialise_Nb_jours(), ensuite la fonction affiche().


Ma question : malgré le fait que les deux fonctions n'aient aucun paramètre d'entrée ni aucun paramètre de sortie, qu'elles ne retournent aucune valeur et malgré le fait que le tableau Nb_jours[13] soit un pointeur propre à la fonction initialise_Nb_jours(), le tableau affiche_Nb_jours[] (déclaré dans la 2eme fonction affiche() ) arrive à pointer sur les valeurs du tableau Nb_jours[13] afin de les afficher.

SVP, pouvez vous m'expliquer cela ?

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
 
/* Fonction qui initialise le tableau Nb_jours */
/* Paramètre d'entrée : aucun                  */
/* Paramètre de sortie : rien                  */
 
void initialise_Nb_jours()
{ int Nb_jours[13];
 
  /* Déclaration d'un compteur de mois */
  int RangMoins;
 
  /* Pour tous les mois de l'année */
  for(RangMoins = 1; RangMoins <= 12 ; RangMoins++)
  { /* Si mois est février */
    if(RangMoins == 2)
 
      /* Alors le nombre de jours est 28 */
      Nb_jours[RangMoins] = 28;
 
      /* Sinon, si le rand du mois est pair et <=7 ou impair et >7 */
      /* Alors le nombre de jours est 30                           */
      else if((RangMoins % 2 == 0 && RangMoins<=7) || (RangMoins % 2 != 0) && RangMoins>7)
      Nb_jours[RangMoins] = 30;
 
      /* Sinon le nombre de jours est 31 */
      else Nb_jours[RangMoins] = 31;
  } 
}
 
/* Fonction qui affiche le tableau Nb_jours */
/* Paramètre d'entrée : aucun               */
/* Paramètre de sortie : rien               */
 
void affiche()
{ int affiche_Nb_jours[13];
 
  /* Déclaration d'un compteur de mois */
  int RangMoins;
 
  /* Pour tous les mois de l'année */
  /* Afficher le nombre de jours pour le mois en cours */
 
  for(RangMoins = 1; RangMoins <= 12 ; RangMoins++)
  printf("Le mois numero %d  de l'annee a %d jours\n", RangMoins, affiche_Nb_jours[RangMoins]);
} 
 
/****************************************************************************************/
/*                               Programme principal                                                                                               */
/****************************************************************************************/
 
void main(void) 
{
 /* Initialisation de Nb_jous */
 initialise_Nb_jours();
 
 /* Affichage de contenu du tableau */
 affiche(); 
}