défi de la semaine : fonction retournant la taille d'un tableau - C++ - Programmation
Marsh Posté le 22-11-2003 à 17:35:05
R3g a écrit : Ca depends de ce que tu connais, non ? parce-que sizeof(array)/sizeof(int), ca te donne la taille de array si array est un tableau d'entiers, non ? |
personne ne comprenant pas le concept de fonction, s'abstenir
j'en profite
sizeof variable
sizeof(type)
la taille d'un tableau t
sizeof tab / sizeof tab[0]
Marsh Posté le 22-11-2003 à 17:39:06
Taz a écrit : dehors |
faut que t'arretes toi, t'es completement grotesque
On dirait une mauvaise parodie d'un dictateur de foire
Marsh Posté le 22-11-2003 à 17:40:52
bah je pose un petit problème sérieux, si ça part en blabla direct dès le premier message, c'est pas terrible.
Marsh Posté le 22-11-2003 à 17:41:51
R3g a écrit : Si je sors à chaque fois qu'il y a qqchose à apprendre, je vais progresser très vite... |
je demande une fonction tu me sors sizeof ... je dis tableau, tu me dis vector ...
Marsh Posté le 22-11-2003 à 17:43:03
Taz a écrit : bah je pose un petit problème sérieux, si ça part en blabla direct dès le premier message, c'est pas terrible. |
bah
*t'es pas obligé de faire ton constipé chronique
*c t pas du blabla
*file la solution au lieu de faire du suspens alacon a tendance masturbatoire (moua je sais et pas vous )
Marsh Posté le 22-11-2003 à 17:43:04
Taz a écrit : bah je pose un petit problème sérieux, si ça part en blabla direct dès le premier message, c'est pas terrible. |
Et t'as eu combien de reponses serieuses ? T'as fais le topic juste pour le plaisir de pouvoir poster ta reponse une fois que tout le monde aura dit qu'il ne sait pas...
Bon je vais être sympa, j'efface mes posts
Marsh Posté le 22-11-2003 à 17:47:25
bah je vais pas filer la réponse directement quand même. La majorité des programmeurs C++ pense que c'est impossible, alors qu'il existe une solution en 3 lignes. Le but c'est de faire un peu réfléchir, je pense que ça c'est interessant, de comprendre ce qui ne marche, et ce qui peut marcher, et surtout pourquoi
Marsh Posté le 22-11-2003 à 17:50:46
Taz a écrit : bah je vais pas filer la réponse directement quand même. La majorité des programmeurs C++ pense que c'est impossible, alors qu'il existe une solution en 3 lignes. Le but c'est de faire un peu réfléchir, je pense que ça c'est interessant, de comprendre ce qui ne marche, et ce qui peut marcher, et surtout pourquoi |
Bon alors essayons de reflechir : la fonction dont tu parles prendrait donc en paramètre un pointeur (je suppose). D'après les faibles connaissances que j'ai, le pointeur est juste variable dont la valeur est une adresse memoire.
Or , à priori, seul le système qui a alloué cette mémoire peut connaitre la taille de la plage, puisque le pointeur ne donne que l'adresse de début. J'ai bon jusque là ou pas ?
Marsh Posté le 22-11-2003 à 17:52:35
R3g a écrit : Bon alors essayons de reflechir : la fonction dont tu parles prendrait donc en paramètre un pointeur (je suppose). D'après les faibles connaissances que j'ai, le pointeur est juste variable dont la valeur est une adresse memoire. |
c'est ce que je pense aussi, lecture de la mémoire jusqu'à atteindre une valeur qui n'est pas du type de celles contenues dans le tableau ?
Marsh Posté le 22-11-2003 à 17:54:28
polo021 a écrit : |
Ou alors écrire dedans et catcher l'exception levée par une acces violation ?
Marsh Posté le 22-11-2003 à 17:54:44
oui et non
un pointeur c'est un pointeur .| si tu l'a eu via un new, alors l'allocateur mémoire en connait la taille de plage allouée, mais cette information n'est pas disponible. si ton pointeur vient d'ailleurs aucun moyen. et un pointeur n'est pas en tableau, bien que ton compilateur sache convertir un tableau tab en pointeur, par exemple
Code :
|
est en fait
Code :
|
qui est correctement typé
donc ta première piste, elle semble pas très concluante ...
Marsh Posté le 22-11-2003 à 17:56:29
Taz a écrit : oui et non
|
Ok mais alors (c'est là que j'y connais rien en C++), pour passer le tableau en paramètre, il faut uiliser un pointeur, ou on peut le passer par référence ?
Marsh Posté le 22-11-2003 à 17:58:13
R3g a écrit : Ou alors écrire dedans et catcher l'exception levée par une acces violation ? |
tu connais vraiment pas grand chose. une erreur de segmentation ne lève pas d'exception et tu peux te ballader la ou tu ne devrais pas sans que ton système t'envoie le dit signal. surtout que si tu réfléchis, c'est un peu dommage d'essayer de calculer la taille d'un tableau à l'exécution, alors que techniquement cette information est disponible à la compilation (ce qu'exploite sizeof)
Marsh Posté le 22-11-2003 à 18:02:24
Faut m'excuser hein.. Je fais du Java, alors gérer la mémoire c'est pas mon truc. Mais ca m'intéresse beaucoup, j'essaie de me mettre au C++. Tu pourrais peut-être lacher un indice ?
Marsh Posté le 22-11-2003 à 18:09:33
ce qu'il faut bien comprendre dans le problème ici, c'est que ce n'est pas une histoire de gestion de la mémoire. un tableau Java a un attribut pour mémoriser sa taille. en C et C++, il n'en ai rien. En C, il est impossible de faire une fonction renvoyant la taille (le nombre d'éléments) d'un tableau. J'espère que tu en ai convaincu. Ton problème reg, c'est que tu débutes un peu trop quand même : je ne pense pas que tu te sois poser la question avant aujourd'hui. Quand je donnerais la solution, aussi simple soit elle, tu ne la comprendras pas.
Alors continue à apprendre. Je n'ai pas souvenir de sujet de ta part : n'hésite pas. Je suis là.
Marsh Posté le 22-11-2003 à 18:18:50
Effectivement, je ne me suis jamais posé la question : j'ai toujours été persuadé qu'on ne pouvait pas connaitre la taille d'un tableau. Je vais arrêter de pourrir ton topic, mais j'attends la réponse avec curiosité.
Marsh Posté le 22-11-2003 à 18:35:07
bon je me lance
Code :
|
ok c'est pas 3 lignes mais bon
Marsh Posté le 22-11-2003 à 18:37:28
en fait non
on imagine un tableau de 3elt en memoire:
tab[0] = 0x01
0x01 : 1elt
0x02 : 2elt
0x03 : 3elt
0x04 : un elt du prog mais pas du tableau
et bam ca marche pas
Marsh Posté le 22-11-2003 à 18:40:31
bah il est bien beau ton programme seulement il boulcera indéfiniment, puisque par définition typeid(tab[0])==typeid(tab[n])
Marsh Posté le 22-11-2003 à 18:48:20
mais la vu que n peut depasser la capacité du tableau c'est pas vrai si n> taille du tableau
Marsh Posté le 22-11-2003 à 18:50:05
fFluFf a écrit : mais la vu que n peut depasser la capacité du tableau c'est pas vrai si n> taille du tableau |
masi biensur .. fais gaffe, on est le weekend, t'es entrain de te piéger toi même
Marsh Posté le 22-11-2003 à 19:09:49
t'es donc entrain de me dire :
int tab[4];
typeid(tab[5]) == typeid(tab[0])
??
Marsh Posté le 22-11-2003 à 19:10:41
taz> laisse encore du temps, je suis sur une idée (tordue).
Marsh Posté le 22-11-2003 à 19:15:18
ffluff > c'est sur que toutes les case d'un tableau ont le même type.
Marsh Posté le 22-11-2003 à 19:33:20
Code :
|
Proposition candide.
Au passage je signale qu'en Ada, ça s'écrit table'Length.
Marsh Posté le 22-11-2003 à 19:39:53
nraynaud a écrit : ffluff > c'est sur que toutes les case d'un tableau ont le même type. |
oui, c'est un peu la base de tous.
Fortune
Marsh Posté le 22-11-2003 à 19:41:24
nraynaud > très très tordu effectivement, et typeof ne fait pas parti du C++. en l'utilisant tu tentes de contourner un problème qui n'existe pas
Marsh Posté le 22-11-2003 à 19:48:01
bon, relaisse du temps, je cherche une référence du C++ (dès qu'on mets template dans google, on a la STL, c'est lourd) et je regarde en détail.
Marsh Posté le 22-11-2003 à 20:10:35
j'abandonne, je trouve pas de spec en lignedu langage (et il semble que ça n'existe pas http://saloon.javaranch.com/cgi-bi [...] 2&t=001713 ), j'ai pas de bouquin, et dans les tutoriaux, j'ai rien trouvé d'intéressant.
Marsh Posté le 22-11-2003 à 20:11:20
euh j'y connais rien du tout en c++ mais on ne peut pas connaitre l'adresse de départ d'allocation du tableau et celle de la fin d'allocation. Avec ça on devrait pouvoir déterminé la taille du tableau donc le nombre d'élément, non
Je vois déjà Taz se taper la tête contre le mur. (excuse moi d'avance)
Marsh Posté le 22-11-2003 à 20:13:32
bossamiral2 a écrit : Je vois déjà Taz me taper la tête contre le mur. |
Marsh Posté le 22-11-2003 à 20:14:22
Au moins j'ai essayé
je suppose que l'on ne peut pas connaitre l'adresse de fin allocation du pointeur
Marsh Posté le 22-11-2003 à 20:25:58
ce n'est pas qu'on ne peut pas, c'est quelle n'existe pas
Citation : pointeur |
!= tableau
de toutes façons. si vous n'avez pas intégré ça, vous faites fausse route
Marsh Posté le 22-11-2003 à 20:26:22
bossamiral > si il pose la question c'est que la réponse doit être un minimum élégante, donc ne repose que sur les types statiques et est entièrement résolue à la compilation.
Marsh Posté le 22-11-2003 à 20:27:19
question :
tableau dynamic (int *tab= new int[10])
ou static (int tab[10])
car si le tableau est dynamic le code de nraynaud ne marche pas
Marsh Posté le 22-11-2003 à 20:29:50
hs:
Un des plus gros regret de ma vie c de ne pas mettre mis a la prog jeune et de ne pas avoir geeké comme vous
fin hs.
Marsh Posté le 22-11-2003 à 17:25:47
je les vois venir les boolays et newbies du C++ et vous autres qui affirmaient qu'on ne peut pas écrire de fonction qui retourne la taille d'un tableau en C++ (je ne parle __pas__ du C).
Manque de bol, pour vous, on peut, et ça fait 3 lignes. Taupe !
Message édité par Taz le 22-11-2003 à 18:17:05