Taille d'un array
Résolumok -
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
- Taille d'un array
- Comment réduire la taille d'un fichier - Guide
- Reduire taille image - Guide
- Afficher taille dossier windows - Guide
- Taille clavier iphone - Guide
- Taille feuille a5 - Guide
1 réponse
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.
Merci beaucoup