|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Date d'inscription: janvier 2008
Messages: 4
|
J'arrive pas a obtenir la taille réelle de mon tableau...
code appelant Code :
int *data = remplirTableau(); int z; for(z = 0; z < (sizeof (*data) / sizeof(int)); z++){ printf("seq: %d",data[z]); } Code :
int* remplirTableau(){ int *data; data = (int *) malloc (sizeof(int) * 10); data[0] = 10; data[1] = 9; data[2] = 8; ... return data; } Merci! |
|
|
|
|
|
#2 | |
![]() Date d'inscription: septembre 2007
Localisation: Évry
Âge: 33
Messages: 1 473
|
Citation:
Lorsque tu fais « * data », tu déréférences le pointeur, c'est-à-dire que tu te réfères à ce qu'il pointe. Et comme ton pointeur pointe le premier élément de ton tableau, tu obtiens la taille de cet élément. |
|
|
|
|
|
|
#3 |
|
Nouveau membre du Club
![]() Date d'inscription: juin 2008
Messages: 71
|
Salut,
Il me semble que le seul moyen pour obtenir la taille d'un tableau est d'utilisé un élément sentinel à la fin de celui ci. |
|
|
|
|
|
#4 |
|
Membre émérite
![]() Date d'inscription: octobre 2008
Âge: 31
Messages: 722
|
En général on se contente plutôt d'enregistrer la taille du tableau quelque part (dans une variable, dans un champs d'une structure, voire avec un #define).
|
|
|
|
|
|
#5 |
![]() Nom : Patrick Gonord
Date d'inscription: juin 2005
Localisation: Orsay
Messages: 3 045
|
En plus de la remarque faite par Obsidian sur *data (qui est un int) , il faut noter que sizeof data / sizeof *data ne donnera pas plus le nombre d'éléments du tableau, puisque data est un int *. Ceci est alors équivalent à sizeof (int*)/ sizeof (int).
Le seul moyen pour une fonction de connaître le nombre d'éléments d'un tableau créé ailleurs est de passer cette valeur à la fonction (ou d'avoir un élément sentinelle comme dans le cas des chaînes de caractères) C'est ici que le nombre d'éléments devrait être défini : Code :
int *data = remplirTableau(nbElements); int z; for(z = 0; z < nbElements; z++){ printf("seq: %d",data[z]); .... int* remplirTableau(int nombre){ int *data= malloc (sizeof(int) * nombre); if(data!= NULL) ... |
|
|
|
|
![]() |
||
Optenir la taille d'un tableau pointé
|
||
| Outils de la discussion | |
|
|