J'ai une variable qui est la tête d'une liste liée. Je veux le faire const car il ne devrait jamais être changé, la variable est utilisée tout au long du programme, donc j'ai pensé que je devrais en faire un const global. Le problème est que je ne pouvais pas l'initialiser après que je l'ai déclaré const.comment initialiser un pointeur const global?
Comment puis-je contourner ce problème?
typedef struct PT {
int x;
int y;
struct PT *next;
} POINT;
//globals
POINT * const mypoint_head;
int main(int argc, char *argv[])
{
int size = 100;
mypoint_head= InitPoint(size); // error C2166: l-value specifies const object
//rest of code
}
POINT* InitPoint(int size)
{
POINT *tmp;
POINT *orig;
int a = 10;
int b = 1000;
orig = (POINT*) malloc (sizeof(POINT) * size);
if(orig == NULL)
return NULL;
tmp = orig;
for (i = 0; i < size; i++)
{
tmp->x = a++;
tmp->y = b++;
if (i == size -1) {
tmp->next = NULL:
}
else {
tmp->next = tmp+1;
}
tmp++;
}
return orig;
}
Quel est l'avantage d'une tête de const ptr quand vous pouvez modifier le reste de la liste? C'est comme ajouter une porte de fer à une paillote. –
@Amardeep: Je pense que c'est plus comme écrire l'adresse de quelqu'un à l'encre, plutôt qu'au crayon. Différentes personnes peuvent entrer et sortir, mais la maison est toujours au même endroit (sauf si vous habitez au Kentucky). –
@Amardeep @Tim Schaeffer - oui Tim, mon intention était d'empêcher de changer mon pointeur "tête" et d'être incapable de libérer cette mémoire plus tard, la fuite ... y at-il une meilleure façon de faire cela? ou est-ce aussi simple que ... si c'est la "tête" ne le change pas. J'avais un nom différent et je l'ai accidentellement changé dans une autre fonction, jusqu'à ce que je réalise que je ne voulais pas faire ça. – emge