2013-06-24 2 views
-2

Je dois passer un tableau de pointeurs à une fonction, Dans l'exemple ci-dessous, il existe une classe appelée base et un tableau de pointeurs appelé pool. Comment puis-je passer le groupe de tableaux à une fonction appelée fonction? 1) dans le cas où je veux pouvoir changer le tableau d'origine des pointeurs. 2) dans le cas où je veux seulement passer une copie du tableau de pointeurs.C++ comment passer tableau de pointeurs à une fonction

Merci,

class base 
{ 

}; 

void function (base * pool) 
{ 

} 


int main 
{ 
    base *pool[40]; 

    function (pool[0]); 

    return 0; 
} 
+0

Peut-on utiliser stl? Si oui, alors utilisez le vecteur des pointeurs. – Kimi

+0

Salut, oui je peux utiliser STL. veuillez expliquer comment cela peut m'aider. – user2162793

+0

Je suis d'accord avec Kimi, vous devriez utiliser un vecteur de pointeurs, car un problème avec array est que vous devez passer sa longueur. Quoi qu'il en soit, vous pouvez simplement passer tableau comme {function (pool); », je suppose ... – Piyuesh

Répondre

3
class base 
{ 
    public: 
    int a; 
}; 

void function (base ** pool) 
{ 
    for (int i = 0 ; i < 40; ++i) 
     cout<<pool[i]->a<<' '; 
} 


int main() 
{ 
    base *pool[40]; 

    // Allocate 40 base objects and the 40 base pointers 
    // point to them respectively  
    for(int i = 0; i < 40; ++i) 
    { 
     pool[i] = new base; 
     pool[i]->a = i; 
    } 
    function (pool); 


    // free the 40 objects 
    for(int i = 0; i < 40; ++i) 
     delete pool[i]; 

    return 0; 
} 

J'ai ajouté le membre a comme un exemple.

serait encore mieux

void function (base ** pool, int n) 
{ 
    for (int i = 0 ; i < n; ++i) 
     cout<<pool[i]->a<<' '; 
} 

et

function (pool, n); 

Il est pas si facile de passer une copie du tableau - en particulier dans le cas où les objets se sont alloués dynamiquement.

+0

merci pour la réponse, son fonctionnement. – user2162793

1

Pour passer un tableau à une fonction, et de maintenir les informations de type sur le tableau, vous pouvez utiliser un modèle:

template <unsigned N> 
void function (base *(&pool)[N]) { 
} 

Il n'y a pas moyen de transmettre une copie d'un tableau, à moins qu'il est à l'intérieur un struct ou class. En C++ 11, vous avez une telle classe STL, appelé array:

#include <array> 
template <unsigned N> 
void function (std::array<base *, N> pool) { 
    pool[0] = 0; 
} 

base b; 
std::array<base *, 40> p; 
p[0] = &b; 
function(p); 
assert(p[0] == &b); 
+0

Salut, merci pour la réponse, ça marche, quel est le sens? g de la dernière ligne assert (p [0] == &b); réponses VC2012: affirmer les identifiants non trouvés. – user2162793

+0

Vous avez besoin de '#include '. C'est l'exception de style C avant C++. Il soulève le signal 'SIGABRT' si la condition n'est pas vraie. – jxh

Questions connexes