Précédent   Forum des professionnels en informatique > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 20/11/2008, 02h36   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 4
Points : 1
Points : 1
Par défaut Optenir la taille d'un tableau pointé

J'arrive pas a obtenir la taille réelle de mon tableau...

code appelant
Code :
1
2
3
4
5
6
 
int *data = remplirTableau();
int z;
for(z = 0; z < (sizeof (*data) / sizeof(int)); z++){
		printf("seq: %d",data[z]);
}
code de la fonction qui remplis le tableau
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
int* remplirTableau(){
 
 
int *data;
data = (int *) malloc (sizeof(int) * 10); 
data[0] = 10;
data[1] = 9;
data[2] = 8;
...
 
return data;
 
}
Il ne boucle qu'une seule fois sur mon tableau comme si il y avait juste un élément, pourquoi?

Merci!
dimethroxy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2008, 03h31   #2
Modérateur
 
Avatar de Obsidian
 
Homme
Développeur
Inscription : septembre 2007
Messages : 3 174
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : septembre 2007
Messages : 3 174
Points : 5 225
Points : 5 225
Citation:
Envoyé par dimethroxy Voir le message
Il ne boucle qu'une seule fois sur mon tableau comme si il y avait juste un élément, pourquoi?

Merci!
Ce que tu veux faire n'est pas possible en C, pour la simple raison que seuls les éléments sont alloués lors de la déclaration d'un tableau. Sa taille en elle-même n'est stockée nulle part. D'ailleurs, tu aurais du t'en rendre compte puisqu'en utilisant malloc(), tu alloues exactement la place pour dix int et rien de plus.

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.
Obsidian est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2008, 07h07   #3
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 80
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 80
Points : 38
Points : 38
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.
Keweed est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2008, 08h29   #4
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 361
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : octobre 2008
Messages : 1 361
Points : 2 002
Points : 2 002
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).
matafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2008, 13h12   #5
Rédacteur/Modérateur
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 4 369
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur

Informations forums :
Inscription : juin 2005
Messages : 4 369
Points : 7 244
Points : 7 244
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 :
1
2
3
4
5
6
7
8
9
10
  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)
...
diogene est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 19h57.


 
 
 
 
Partenaires

Hébergement Web