Taille d'un array

Résolu/Fermé
mok - Modifié le 19 août 2022 à 12:53
 mok - 18 août 2022 à 15:23

Bonjour,

Je cherche comment déduire la taille d'un tableau déclaré comme suite :

int *tab = malloc(sizeof(int) * 100);

et après modifier par une fonction: 

remplilists(ls, lr, mat, listi, listj);

J'ai utilisé :

sizeof(listi)

... mais ça renvoie 4 ? 

Merci d'avance
Windows / Chrome 104.0.0.0

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
Modifié le 19 août 2022 à 12:54

Bonjour,

tab est ici un pointeur. Il pointe sur 100 int et peut être syntaxiquement utilisé comme un tableau.

tab[x] est en fait résolu comme étant  *(tab+x)

Le nombre d'élément du tableau c'est 100, la taille du tableau c'est 100*sizeof(int). Ça, toi tu le sais, mais en fait le code ne le mémorise pas, un pointeur c'est juste un pointeur.

Si la fonction peut changer la taille réservée, elle doit t'indiquer sa nouvelle taille. J'y crois peu ici car pour changer une taille, il faut allouer un nouveau pointeur et donc c'est comme si le tableau changeait de place.
Donc une fonction qui changerait la taille doit recevoir:

  • l'adresse du pointeur (pour en changer la valeur)
  • le nombre d'éléments du tableau (pour savoir si elle a besoin de l'adapter)
  • un moyen d'indiquer que la taille à changée (par un paramètre reçu par adresse ou par retour de la fonction par exemple.)

Le nombre d'éléments alloué est impossible à retrouver. Et comme on a toujours besoin de se souvenir de la taille, on doit toujours avoir une variable de plus qui indique cela.

size_t nb_element = 100;
int *tab = malloc(sizeof(int) * nb_element);

Le nombre d'éléments, c'est 100.

0

Merci beaucoup

0