Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2760 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Taille d'un tableau d'int ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[C] Taille d'un tableau d'int ?

n°571315
mesta
Posté le 20-11-2003 à 10:30:51  profilanswer
 

Bonjour,
je cherche a trouver la taille d'un tableau de integer, mais je n'ai, pour l'instant, trouver aucune solution!
 
int tab[10];
printf("%i",*****(tab));
 
J'ai essayé sizeof(tab), mais ca ne marche pas totalement!

mood
Publicité
Posté le 20-11-2003 à 10:30:51  profilanswer
 

n°571317
Taz
bisounours-codeur
Posté le 20-11-2003 à 10:34:52  profilanswer
 

sizeof tab / sizeof tab[0]

n°571318
chrisbk
-
Posté le 20-11-2003 à 10:35:02  profilanswer
 

ben t'es peinard, y'a pas de solution

n°571319
black_lord
Truth speaks from peacefulness
Posté le 20-11-2003 à 10:36:06  profilanswer
 

sizeof(int)*10 ??


Message édité par black_lord le 20-11-2003 à 10:37:25
n°571320
Kristoph
Posté le 20-11-2003 à 10:36:12  profilanswer
 

mesta a écrit :

Bonjour,
je cherche a trouver la taille d'un tableau de integer, mais je n'ai, pour l'instant, trouver aucune solution!
 
int tab[10];
printf("%i",*****(tab));
 
J'ai essayé sizeof(tab), mais ca ne marche pas totalement!
 


 
Tu ne peux trouver la taille d'un tableau que si le compilateur connait cette taille : on parle donc uniquement des tableaux de taille fixe définis en tant que variables globales ou locale.

n°571323
mesta
Posté le 20-11-2003 à 10:38:02  profilanswer
 

lol chrisbk.
 
Cela marche:
int tab_[7]={2,9,3,65,1,32,87};
printf("%i\n",sizeof(tab_)/4);
 
Mais bon ce n'est pas le top.. si quelqu'un a une autre idée, elle serait la bienvenue?

n°571325
Taz
bisounours-codeur
Posté le 20-11-2003 à 10:39:25  profilanswer
 

Kristoph a écrit :


 
Tu ne peux trouver la taille d'un tableau que si le compilateur connait cette taille : on parle donc uniquement des tableaux de taille fixe définis en tant que variables globales ou locale.

moi pas. Ça fonctionne avec les vla du C99

n°571327
Taz
bisounours-codeur
Posté le 20-11-2003 à 10:40:08  profilanswer
 

mesta a écrit :

lol chrisbk.
 
Cela marche:
int tab_[7]={2,9,3,65,1,32,87};
printf("%i\n",sizeof(tab_)/4);
 
Mais bon ce n'est pas le top.. si quelqu'un a une autre idée, elle serait la bienvenue?

putain c'est qui le maître de la cat
vous m'écoutez bordel :o

n°571328
chrisbk
-
Posté le 20-11-2003 à 10:41:22  profilanswer
 

mesta a écrit :

lol chrisbk.
 
Cela marche:
int tab_[7]={2,9,3,65,1,32,87};
printf("%i\n",sizeof(tab_)/4);
 
Mais bon ce n'est pas le top.. si quelqu'un a une autre idée, elle serait la bienvenue?


taz a donné la reponse, mais elle ne marche qu'avec les trucs alloués statiquement :O (eg si jamais plus tard tu fais du malloc oublie tout de suite cette methode)
 
dans l'absolu il te vaut mieux prendre l'habitude de programmer en partant du principe que tu ne peux pas retrouver la taille de ton tableau (bref fo la stocker qqpart)

n°571331
mesta
Posté le 20-11-2003 à 10:41:58  profilanswer
 

J'ai essayé Taz mais ca ne marche pas

mood
Publicité
Posté le 20-11-2003 à 10:41:58  profilanswer
 

n°571333
Taz
bisounours-codeur
Posté le 20-11-2003 à 10:42:23  profilanswer
 

chrisbk a écrit :


taz a donné la reponse, mais elle ne marche qu'avec les trucs alloués statiquement :O (eg si jamais plus tard tu fais du malloc oublie tout de suite cette methode)


 
qu'avec les tableaux.
 

chrisbk a écrit :


dans l'absolu il te vaut mieux prendre l'habitude de programmer en partant du principe que tu ne peux pas retrouver la taille de ton tableau (bref fo la stocker qqpart)


sauf quand justement tu as un tableau

n°571334
Taz
bisounours-codeur
Posté le 20-11-2003 à 10:42:34  profilanswer
 

mesta a écrit :

J'ai essayé Taz mais ca ne marche pas

on parie ?


Message édité par Taz le 20-11-2003 à 10:42:40
n°571335
mesta
Posté le 20-11-2003 à 10:42:40  profilanswer
 

Ok je vais me dermerder alors, merci les mecs ;)

n°571336
mesta
Posté le 20-11-2003 à 10:43:06  profilanswer
 

Taz a écrit :

on parie ?


 
Si je te le dis c'est que j'ai testé...

n°571337
Taz
bisounours-codeur
Posté le 20-11-2003 à 10:44:27  profilanswer
 

mesta a écrit :


 
Si je te le dis c'est que j'ai testé...

mais bien sur ... est moi j'ai appris le C ce matin ... pas très sérieux tout ça quand même
 
 
pour ceux qui ne croit pas à C99
 

Code :
  1. #include <stdio.h>
  2. static size_t size(size_t n)
  3. {
  4.   int tab[n];
  5.   return sizeof tab / sizeof tab[0];
  6. }
  7. int main()
  8. {
  9.   unsigned n;
  10.   scanf("%u", &n);
  11.   printf("%u\n", size(n));
  12. }

n°571340
chrisbk
-
Posté le 20-11-2003 à 10:46:57  profilanswer
 

Taz a écrit :


qu'avec les tableaux.


 
Restons sobre et vulgarisons, la difference pointeur/tableau est pour bpc completement tenue, et ceci n'est aidé en rien par ce qu'autorise le C, genre :

Code :
  1. int a[10];
  2. int *b = a;


 
De plus, partout ou ca va causer de malloc ca va causer de "tableau alloué dynamiquement", achevant de semer doute et confusion.
Donc tu peux etre sur de voir des trucs genre :
 

Code :
  1. int *a = malloc(4 * sizeof(int));
  2. int t = sizeof(a) / sizeof(int);


 
bref je prefere laisser ces pinaillages grammaticaux de coté


Message édité par chrisbk le 20-11-2003 à 10:47:47
n°571342
Taz
bisounours-codeur
Posté le 20-11-2003 à 10:50:11  profilanswer
 

chrisbk a écrit :


 
Restons sobre et vulgarisons, la difference pointeur/tableau est pour bpc completement tenue,  


 
c'est bien la le problème

chrisbk a écrit :


et ceci n'est aidé en rien par ce qu'autorise le C, genre :

Citation :

int a[10];
int *b = a;




 
int[10] est un type distinct.
 
qui se rend compte qu'il y a une conversion ici ?
 

chrisbk a écrit :


De plus, partout ou ca va causer de malloc ca va causer de "tableau alloué dynamiquement", achevant de semer doute et confusion.
Donc tu peux etre sur de voir des trucs genre :
 

Code :
  1. int *a = malloc(4 * sizeof(int));
  2. int t = sizeof(a) / sizeof(int);


 
bref je prefere laisser ces pinaillages grammaticaux de coté  


 
c'est loin d'être un truc de grammaire. t'as un pointeur, le résultat de sizeof est ce qu'il doit etre, t'as un tableau, il est ce qu'il doit etre.
 
au fait
 
sizeof variable
sizeof(type)

n°571344
mesta
Posté le 20-11-2003 à 10:53:35  profilanswer
 

Est-ce bien cela que je dois avoir donc:
 
void taille(int tab[]) {
return sizeof tab / sizeof tab[0];
}

n°571346
Taz
bisounours-codeur
Posté le 20-11-2003 à 10:55:48  profilanswer
 

non absolument pas ...
 
déjà ça compile pas
 
mais int tab[] est un notation équivalent à int * const tab qui a pour effet qu'on indique au lecteur l'emploi qu'on va faire du pointeur
 
 
la seule solution est donc une macro

n°571348
chrisbk
-
Posté le 20-11-2003 à 10:56:18  profilanswer
 

Taz a écrit :


qui se rend compte qu'il y a une conversion ici ?


 
Peros quand j'ai débuté en C on m'a matraqué que "nom du tableau seul" etait le pointeur vers le premier element. Vazy pour voir une conversion, la dedans. (ce qui faisait que d'un point de vue implem je croyais que j'avais effectivement un pointeur, faisant tout merder mon bel asm inline)
 

Citation :

c'est loin d'être un truc de grammaire. t'as un pointeur, le résultat de sizeof est ce qu'il doit etre, t'as un tableau, il est ce qu'il doit etre.


 
Vi mais un malloc sera decrit comme un "tableau alloué dynamiquement" (y'a tableau dans ma phrase la, donc si on le replace dans la tienne ca devrait marcher) et ca va engendre moulte confusion, c'est tout ce que je voulais dire (a la fin [:sisicaivrai])
 
 

Taz a écrit :


sizeof variable
sizeof(type)


tiens je savais pas, sizeof(variable) est tjs passé comme une lettre a la poste

n°571353
mesta
Posté le 20-11-2003 à 10:58:57  profilanswer
 

Ya pas un moyen de trouver lcette taille en faisant :  
 
int i=0;
while (tab[i]!='\0')
{ ... }  
 
Ca marche ca?

n°571355
Taz
bisounours-codeur
Posté le 20-11-2003 à 11:00:21  profilanswer
 

ben le problème est bien l'enseigement en fait ...
 
quand tu fais
 
int tab[10];
int *p = tab;
 
ton compilo fait en fait
 
int *p = &tab[0]
 
ce qui est correctement typé.
 
pour la confusion vient du fait qu'on ne distingue pas tableau et pointeur, donc apres on s'etonne que ça marche ou pas et on se braque tout pointeur, jusqu'au jour ou ...
j'ai filé des cours cet été à la fac, suffit de bien marquer la différence, tu enseignes d'abord les tableaux sans parler de pointeur, puis les pointeurs, et ça passe très bien
 
le parenthésage pour sizeof c'est pour des histoire à la con que tu peux appeler une varaible comme un nom de type ... bordélique quoi

n°571357
Taz
bisounours-codeur
Posté le 20-11-2003 à 11:00:44  profilanswer
 

mesta a écrit :

Ya pas un moyen de trouver lcette taille en faisant :  
 
int i=0;
while (tab[i]!='\0')
{ ... }  
 
Ca marche ca?

non. t'as pas cours aujourd'hui ?

n°571358
chrisbk
-
Posté le 20-11-2003 à 11:01:12  profilanswer
 

mesta a écrit :

Ya pas un moyen de trouver lcette taille en faisant :  
 
int i=0;
while (tab[i]!='\0')
{ ... }  
 
Ca marche ca?


 
erf erf erf erf
alors deja '\0' = 0
et un int egal a 0, ca n'a rien d'un ovni
 
ce que tu decris la c'est la representation standart en C d'une chaine de caractere, absolument rien d'autre !
 
 
 
 
 
 

n°571366
mesta
Posté le 20-11-2003 à 11:06:10  profilanswer
 

Chris: '\0'=0 ok :D
 
Taz: Non et c'est bien pour cela que je vous demande a vous!
 
Je vais vous montrer le programme que je dois faire, peut etre que comme ca vous aurez une idée (tout est simplifié):
 

Code :
  1. int degre(int tab[]) {
  2. [ Ici je veux la fonction pour trouver la taille du tableau ]
  3. }
  4. main()
  5. {
  6. printf("Taille du tableau: " );
  7. scanf("%i",&deg);
  8. int tab[deg];
  9. int deg=degre(tab);
  10. }


 
Je veux trouver le degre du polynome sans passer deg en parametre. Est-ce donc possible?


Message édité par mesta le 20-11-2003 à 11:06:48
n°571369
chrisbk
-
Posté le 20-11-2003 à 11:08:50  profilanswer
 

>[ Ici je veux la fonction pour trouver la taille du tableau ]
 
Y'a pas. Question suivante

n°571371
Taz
bisounours-codeur
Posté le 20-11-2003 à 11:09:08  profilanswer
 

je te dis que quand tu écris
 
  int degre(int tab[]) {
    [ Ici je veux la fonction pour trouver la taille du tableau ]
  }
 
 
tab n'est pas un tableau et qu'on ne peux pas passer un tableau en paramètre puisqu'un tableau n'est pas une lvalue et que le C n'accepte que le passage par valeur

n°571372
mesta
Posté le 20-11-2003 à 11:11:02  profilanswer
 

Je dois pourtant faire une fonction qui me renvoie la taille d'un tableau :( Est-ce impossible?


Message édité par mesta le 20-11-2003 à 11:11:33
n°571373
Taz
bisounours-codeur
Posté le 20-11-2003 à 11:11:46  profilanswer
 

ça l'est

n°571375
mesta
Posté le 20-11-2003 à 11:12:30  profilanswer
 

lol vive le C .. c'est bien merdique quand même :(
 
Merci quand même :)
 
ps: sinon en declarement autrement la fonction int degre(****) il n'y a pas une solution?


Message édité par mesta le 20-11-2003 à 11:13:17
n°571377
chrisbk
-
Posté le 20-11-2003 à 11:12:58  profilanswer
 

c'est rustre, le C

n°571379
mesta
Posté le 20-11-2003 à 11:14:27  profilanswer
 

ps: sinon en declarement autrement la fonction int degre(****) il n'y a pas une solution?

n°571380
Taz
bisounours-codeur
Posté le 20-11-2003 à 11:14:57  profilanswer
 

de toutes façons ton programme ne sera pas valide, je doute qu'on t'enseigne le C99 mais plutot le C ANSI

n°571381
chrisbk
-
Posté le 20-11-2003 à 11:15:08  profilanswer
 

int degre(int []tableau, int tailleTableau)

n°571385
mesta
Posté le 20-11-2003 à 11:19:36  profilanswer
 

Je crois que je vais laisser tomber.. il ne prend pas int degre(int []tableau, int tailleTableau)!

n°571388
Taz
bisounours-codeur
Posté le 20-11-2003 à 11:20:17  profilanswer
 

chris va faire du Java :o
 
int degre(int tableau[], size_t tailleTableau);


Message édité par Taz le 20-11-2003 à 11:20:28
n°571394
mesta
Posté le 20-11-2003 à 11:21:40  profilanswer
 

lol ca m'avance pas plus Taz :)

n°571397
Taz
bisounours-codeur
Posté le 20-11-2003 à 11:22:43  profilanswer
 

pourquoi ?

n°571398
chrisbk
-
Posté le 20-11-2003 à 11:22:43  profilanswer
 

Taz a écrit :

chris va faire du Java :o
 
int degre(int tableau[], size_t tailleTableau);


 
sclair, chui tout contaminé par le java :/

n°571401
mesta
Posté le 20-11-2003 à 11:24:55  profilanswer
 

Taz a écrit :

pourquoi ?


 
Pour continuer la fonctio.. que mettre dedans :/

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Taille d'un tableau d'int ?

 

Sujets relatifs
rafraichissement d'un tableau dynamique a l'aide de boutonstaille d'un char*[] avec \0
[CSS] Remplace un tableau d'éléments centrés par une listeTaille d'une base
taille de bordure sur tableauxTrier un tableau associatif ...
[C] Comment passer un tableau de 2 char en un chiffre hexa[delphi]Forcer la taille de sa police(reglage "Grande taille" chiant!)
centrer un tableau en htmlProbleme de taille avec ZipInputStream
Plus de sujets relatifs à : [C] Taille d'un tableau d'int ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR