Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le mot-clef const ne fonctionne pas

    24 octobre 2019 à 15:31:14

    Bonjour,

    Je ne comprends pas pourquoi le code suivant compile correctement à la ligne n°14 :

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct
    {
    	int* list;
    	int n;        // Nombre d'entiers dans la liste
    	int size;     // Nombre d'entiers qu'on peut stocker dans la liste
    
    } IntegerList;
    
    void ma_fonction(const IntegerList* const IL)
    {
    	IL->list[0] = 42;  // ...mais le mot-clef const ??
    }
    
    int main(void)
    {
    	IntegerList IL;
    	IL.list = malloc(3*sizeof(int));
    
    	IL.list[0] = 14;
    	ma_fonction(&IL);
    
    	printf("IL.list[0] : %d\n", IL.list[0]);	// Affiche 42 et pas 14
    
    	free(IL.list);
    	return EXIT_SUCCESS;
    }

    Que fait le mot-clef const ici ?

    • Partager sur Facebook
    • Partager sur Twitter
      24 octobre 2019 à 17:17:55

      L' emplacement pointé par IL->List ne fait pas partie de la structure. Tu as le pointeur qui est constant et les champs de la structure.

      Tu ne peux pas faire IL->list = NULL; ni IL = NULL; ...

      • Partager sur Facebook
      • Partager sur Twitter
        24 octobre 2019 à 17:39:19

        Et oui, la 'constitude' ne se transmet pas aux éléments pointés.
        - IL est const, on ne peut pas le modifier (c'est le second const de const IntegerList* const IL)
        - *IL est const, on ne peut pas modifier (c'est le premier const de const IntegerList* const IL) et donc les champs qui sont dans IL (tels que IL->xxxx) ne sont pas modifiables.
        - si parmi ces champs il y des structures cela se transmet bien (un champs de type structure inclue dans une structure constante est constante.)
        - si parmi ces champs il y a un tableau cela se transmet bien.
        - mais s'il y a des champs qui sont des pointeurs la 'constitude' ne se transmet pas aux objets qui sont pointés, et tu es dans ce cas. Ils se sont posés la question au moment de la définition de const, mais cette transmission automatique avait surtout des inconvénients (je ne retrouve plus l'article.)
        • Partager sur Facebook
        • Partager sur Twitter

        En recherche d'emploi.

        Le mot-clef const ne fonctionne pas

        × 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