2013-06-24 100 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