2013-06-24 103 views
-2

我需要将指针数组传递给函数, 在下面的示例中,有一个名为base的类和一个名为pool的指针数组。 如何将数组池传递给一个名为function的函数? 1)如果我想要改变原始指针数组, 2)万一我只想传递指针数组的副本。C++如何将指针数组传递给函数

谢谢,

class base 
{ 

}; 

void function (base * pool) 
{ 

} 


int main 
{ 
    base *pool[40]; 

    function (pool[0]); 

    return 0; 
} 
+0

你可以用stl吗?如果是,则使用指针向量。 – Kimi

+0

嗨,是的,我可以使用STL。请解释它如何帮助我。 – user2162793

+0

我同意Kimi,你应该使用指针向量,因为数组的一个问题是你必须通过它的长度。无论如何,你可以传递数组像{函数(池);“,我猜... – Piyuesh

回答

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; 
} 

我添加a构件只是作为一个例子。

更妙的是

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

function (pool, n); 

这不是那么容易通过数组的副本 - 尤其是在对象本身是动态分配的情况。

+0

谢谢你的回答,它的工作。 – user2162793

1

要传递一个数组的功能,并保持对数组类型的信息,您可以使用模板:

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

有没有办法通过一个数组的副本,除非是内部一个structclass。在C++ 11中,你在STL中有这样一个类,叫做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

嗨,谢谢你的答案,它的工作原理是什么g最后一行断言(p [0] == &b); VC2012回复:断言标识符未找到。 – user2162793

+0

你需要'#包括'。这是C++出现之前的C风格异常。如果条件不成立,它会引发'SIGABRT'信号。 – jxh