2013-04-23 2 views
3

Comment trouver la taille en octets d'un tableau comme celui-ci?rechercher la taille d'un tableau multidimensionnel

double dArray[2][5][3][4]; 

J'ai essayé cette méthode mais elle renvoie "2". Peut-être parce que le tableau est seulement déclaré et n'est rempli de rien?

 #include <iostream> 
    #define ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0]))) 
    using namespace std; 

     int main() { 
     double dArray[2][5][3][4]; 
     cout << ARRAY_SIZE(dArray) << endl; 
     } 
+0

voulez-vous la taille en termes d'octets ou la taille en termes de combien d'éléments sont dans le tableau entier? – Boumbles

+0

Pour obtenir le nombre total d'éléments dans un tableau (ici: 2 * 5 * 3 * 4), vous pouvez utiliser quelque chose comme 'template constexpr std :: taille_t get_element_count (T const & a) {return sizeof (T)/sizeof (nom de fichier std :: remove_all_extents :: type); } ' – dyp

Répondre

4

Comment puis-je trouver la taille en octets

Cela vous indique combien de éléments sont présents dans un tableau. Et il donne la réponse attendue de 2 pour dArray.

#define ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0]))) 

Si ce que vous voulez le nombre d'octets , ce fera.

#define ARRAY_SIZE(array) (sizeof(array)) 

Peut-être parce que le tableau est seulement déclaré et non rempli de quoi que ce soit?

Cela n'affectera pas le comportement de sizeof. Un tableau n'a aucun concept de rempli ou pas rempli.

+1

Y a-t-il une raison pour les doubles crochets dans la première macro' ((array)) '? – dyp

+0

@DyP Aucune raison fonctionnelle dont je suis au courant. C'est le code présenté dans la question. :) –

+0

Assez sûr que OP a plus de mal à obtenir 2 * 5 * 3 * 4 que la conversion d'elem en octets. – djechlin

2

array[0] contient 5 * 3 * 4 éléments si sizeof(array)/sizeof(array[0]) vous donnera 2 lorsque la première dimension de votre tableau est 2

Ressaisissez votre macro:

#define ARRAY_SIZE(array, type) (sizeof((array))/sizeof((type))) 

pour obtenir le nombre d'éléments,

ou simplement sizeof(array) pour obtenir le nombre d'octets.

Questions connexes