Taille d'un tableau d'int ? [C] - C - Programmation
Marsh Posté le 20-11-2003 à 10:36:06
sizeof(int)*10 ??
Marsh Posté le 20-11-2003 à 10:36:12
mesta a écrit : Bonjour, |
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.
Marsh Posté le 20-11-2003 à 10:38:02
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?
Marsh Posté le 20-11-2003 à 10:39:25
Kristoph a écrit : |
moi pas. Ça fonctionne avec les vla du C99
Marsh Posté le 20-11-2003 à 10:40:08
mesta a écrit : lol chrisbk. |
putain c'est qui le maître de la cat
vous m'écoutez bordel
Marsh Posté le 20-11-2003 à 10:41:22
mesta a écrit : lol chrisbk. |
taz a donné la reponse, mais elle ne marche qu'avec les trucs alloués statiquement (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)
Marsh Posté le 20-11-2003 à 10:42:23
chrisbk a écrit : |
qu'avec les tableaux.
chrisbk a écrit : |
sauf quand justement tu as un tableau
Marsh Posté le 20-11-2003 à 10:42:34
mesta a écrit : J'ai essayé Taz mais ca ne marche pas |
on parie ?
Marsh Posté le 20-11-2003 à 10:43:06
ReplyMarsh Posté le 20-11-2003 à 10:44:27
mesta a écrit : |
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 :
|
Marsh Posté le 20-11-2003 à 10:46:57
Taz a écrit : |
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 :
|
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 :
|
bref je prefere laisser ces pinaillages grammaticaux de coté
Marsh Posté le 20-11-2003 à 10:50:11
chrisbk a écrit : |
c'est bien la le problème
chrisbk a écrit :
|
int[10] est un type distinct.
qui se rend compte qu'il y a une conversion ici ?
chrisbk a écrit :
|
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)
Marsh Posté le 20-11-2003 à 10:53:35
Est-ce bien cela que je dois avoir donc:
void taille(int tab[]) {
return sizeof tab / sizeof tab[0];
}
Marsh Posté le 20-11-2003 à 10:55:48
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
Marsh Posté le 20-11-2003 à 10:56:18
Taz a écrit : |
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 )
Taz a écrit : |
tiens je savais pas, sizeof(variable) est tjs passé comme une lettre a la poste
Marsh Posté le 20-11-2003 à 10:58:57
Ya pas un moyen de trouver lcette taille en faisant :
int i=0;
while (tab[i]!='\0')
{ ... }
Ca marche ca?
Marsh Posté le 20-11-2003 à 11:00:21
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
Marsh Posté le 20-11-2003 à 11:00:44
mesta a écrit : Ya pas un moyen de trouver lcette taille en faisant : |
non. t'as pas cours aujourd'hui ?
Marsh Posté le 20-11-2003 à 11:01:12
mesta a écrit : Ya pas un moyen de trouver lcette taille en faisant : |
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 !
Marsh Posté le 20-11-2003 à 11:06:10
Chris: '\0'=0 ok
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 :
|
Je veux trouver le degre du polynome sans passer deg en parametre. Est-ce donc possible?
Marsh Posté le 20-11-2003 à 11:08:50
>[ Ici je veux la fonction pour trouver la taille du tableau ]
Y'a pas. Question suivante
Marsh Posté le 20-11-2003 à 11:09:08
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
Marsh Posté le 20-11-2003 à 11:11:02
Je dois pourtant faire une fonction qui me renvoie la taille d'un tableau Est-ce impossible?
Marsh Posté le 20-11-2003 à 11:12:30
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?
Marsh Posté le 20-11-2003 à 11:14:27
ps: sinon en declarement autrement la fonction int degre(****) il n'y a pas une solution?
Marsh Posté le 20-11-2003 à 11:14:57
de toutes façons ton programme ne sera pas valide, je doute qu'on t'enseigne le C99 mais plutot le C ANSI
Marsh Posté le 20-11-2003 à 11:19:36
Je crois que je vais laisser tomber.. il ne prend pas int degre(int []tableau, int tailleTableau)!
Marsh Posté le 20-11-2003 à 11:20:17
chris va faire du Java
int degre(int tableau[], size_t tailleTableau);
Marsh Posté le 20-11-2003 à 11:22:43
Taz a écrit : chris va faire du Java |
sclair, chui tout contaminé par le java
Marsh Posté le 20-11-2003 à 11:24:55
Reply
Marsh Posté le 20-11-2003 à 10:30:51
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!