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;
}
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 constde const IntegerList* const IL) - *IL est const, on ne peut pas modifier (c'est le premier constde 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.)
× 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.
En recherche d'emploi.