begin process at 2012 05 30 18:22:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

taille d'un tableau dans un sous programme


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

taille d'un tableau dans un sous programme

samedi 19 février 2005 à 13:50:34 | taille d'un tableau dans un sous programme

jagui jaguar

Salut, je cherche a conna^tre la taille de mon tableau une fois qu'il est passé en argument dans un sous programme. Pour l'instant, j'ai cette déclaration :
void fermee(int piste[],const int lgth);

et dans mon main j'ai :
int piste[6];
int lgth=sizeof(piste)/sizeof(piste[0]);
fermee(piste,lgth);

je voudrais passer piste[] comme seul argument dans ma procédure fermee, donc j'ai mis :

void fermee(int piste[])
{
int lgth=sizeof(piste)/sizeof(piste[0]);
printf("%d",lgth);
}

il m'affiche alors un. Quand j'affiche séparément sizeof(piste) et sizeof(piste[0]), il m'affiche "4". Mais quand je les affiches à partir du main, tout marche bien : sizeof(piste) affiche "24" et sizeof(piste[0]) affiche "4".
Pourquoi cela ne marche pas dans la procédure?
Merci de votre aide.


samedi 19 février 2005 à 14:20:41 | Re : taille d'un tableau dans un sous programme

simtiers

C'est tout simplement parce que int piste[] correspond à int* piste, un poiteur
=> les pointeurs ont tous une longueur de 4 octets, d'où le 4 renvoyé dans ta procédure

Dans le main, par contre, int piste[6] n'est pas un pointeur, sa taille est : 6 * sizeof(int) = 24

Le mieux est de garder un argument "taille" => comme dans la plupart des fonctions Windows, voire DOS.

Si tu veux vraiment utiliser un unique argument :
- Place une valeur arbitraire marquant la fin (du genre 1024 ou -1....)
- Fait une recherche de cette valeur :

int len=0;
while( true )
{
    if( Piste[len] != 1024 ) // 1024 = marquage
       len++;
    else
       break;
}

Voilà, c tout ce que j'en pense
samedi 19 février 2005 à 14:21:49 | Re : taille d'un tableau dans un sous programme

asmanur

Tu ne peux pas passer un tableau comme arguments, c'est un pointeur sur le prmier éléments que tu passes c'est pour ca qu'il te met 4
essaye
{

  int tab[]=piste;
int lgth = sizeof(tab)/sizeof(int);
}
mais je suis pas sur que ca marche
a+

samedi 19 février 2005 à 14:25:18 | Re : taille d'un tableau dans un sous programme

simtiers

Ca ne marchera pas, en tout cas je ne pense pas :
int tab[] = piste
=> étant donné que tu ne définis pas le nombre d'éléments, le compilateur le transformera en un pointeur.
sizeof(tab) = 4

C'est mon avis, j'ai pas vérifié
samedi 19 février 2005 à 14:28:49 | Re : taille d'un tableau dans un sous programme

jagui jaguar


okay je vous remercie. La deuxième solution n'est pas possible, donc je vais rester sur mon premier choix.
A+

samedi 19 février 2005 à 14:34:02 | Re : taille d'un tableau dans un sous programme

simtiers

Sage décision 
samedi 19 février 2005 à 15:48:31 | Re : taille d'un tableau dans un sous programme

steve_clamage

c'est possible en c++ en passant le tableau par reference

void fermee(int (&piste)[6])
{
int lgth=sizeof piste / sizeof piste[0];
}

il faut eviter d'utiliser sizeof avec des parantheses pour les identificateurs

samedi 19 février 2005 à 16:51:44 | Re : taille d'un tableau dans un sous programme

simtiers

Tu perds tout l'interet :
lgth de renverra 6, car tu as bloqué le nombre déléments du tableau à 6 !
samedi 19 février 2005 à 17:01:04 | Re : taille d'un tableau dans un sous programme

steve_clamage

a oui ?

template <typename T, std::size_t S>
void fermee(T (&v)[S])
{
int lgth=sizeof v/ sizeof v[
0];
}


et la

samedi 19 février 2005 à 17:43:52 | Re : taille d'un tableau dans un sous programme

simtiers



Là, ça devrait aller mieux

1 2

Cette discussion est classée dans : affiche, int, piste, sizeof, lgth


Répondre à ce message

Sujets en rapport avec ce message

tailles des variables en octets [ par aardman ] Salut,Je me suis fait quelques tests sur les tailles des variables.voila les valeurs que mon compilo me retourne:sizeof(char) retourne 1sizeof(int) pointeur de fonction [ par Larwin ] salut tout le mondebon j'suis un gros débutant c/c++ et je fais mes premiers pas depuis 2, 3 jours...j'ai deja un petit probleme :)je m'explique :j'ai Problm de Linkage [ par Stormy ] J'ai ce code à compiler sous MSVC 6. Or, bien que mes options de Link soient justes (il me semble), j'obtiens une erreur de linkage:fatal error C1083: Bug windows avec mon programme (nivo débutant) [ par MATHIS49 ] Bonjour ! Etant un gros debutant en C je m'essai à faire un programme d'amortissement tout simple. Mais le probleme c'est que windows plante lorsque j Afficher un float a l'ecran, %f de printf [ par kaervas ] Bonjour, je suis en train de coder la fonction %f de printf, je galere un peu en fait! Pour le %d on utilise des modulos et des puissances decroissant Pbm de spawning sur un prog de classe? [ par romca ] J'ai un exo et le programme est le suivant en bas. Il n'est pas complété c'est normal, c'est le but de l'exercice,(merci de ne pas me le compléter).Ma Concatener 2 tableuax triés [ par Strick9 ] Salut à tous, je bloque sur l'énoncé suivant.De l'aide serait plus que bienvenue.Ecrire une fonction qui permet d'insérer un tableau d'entier T2 dans Surcharge des opérateurs [ par karamellatti ] salut tout le monde,je sollicite votre aide pour la résolution d'un ptit problem concernant un mini-programme de calcul matriciel..voici  le programme taille chaine de char [ par langedechu ] Salut , voila mon prob (je sais plus comment faire) :j'ai une variable : const char *buffer; et j aimerais savoir le nombre de caractere stocker dans Winsock2 et Wifi [ par djin94 ] Bonjour,Je programme sous Visual C++ et je souhaite établir une connection UDP entre deux pc via une liaison Wifi. J'ai essayé avec Winsock2 mais ca n


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,160 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales