2011-04-07 69 views
0

我有一个数组声明获得通过功能PARAM数组

Object array[N]; 

void GetArray(void** array, size_t count) 
{ 
    *array = array; 
    *count = N; 
} 

我试图调用函数与此代码的函数:

size_t number; 
GetArray(XXX, &number); 

其中是XXX我应该通过什么来获得数组?谢谢

编辑1

Object *array 
GetArray((void**)array, number) 

EDIT 2

static Object array[N] 
+0

你想做什么?将数组的值复制到另一个数组或将这两个数组指向相同的数据? – jfs 2011-04-07 17:34:08

+0

指向两个数组相同的数据 – Stefano 2011-04-07 17:37:50

回答

2

虽然我不是100%确信我正确地理解你的意图, 如果GetArray必须返回Object array[N]本身,有关返回从GetArray Object*怎么样?
例如:

size_t const N = 1; 
Object array[N]; 

Object* GetArray(size_t* count) 
{ 
    *count = N; 
    return array; 
} 

编辑
至于我看到你编辑的问题,为GetArray参数number 似乎是作为一个参考值(非指针)。 因此,至于数组,如何取得参考而不是指针? 然后你可以避免麻烦void**的东西。
例如:

void GetArray(Object*& arr, size_t& count) 
{ 
    arr = array; 
    count = N; 
} 

int main() { 
    size_t number; 
    Object *arr; 
    GetArray(arr, number); 
    for (size_t i = 0; i < number; ++ i) { 
     Object o = arr[i]; // example 
    } 
} 
+0

@ise我编辑我的问题与实际的代码,它编译好,但是当我编译我有一个关于单位变量的警告和程序停止工作与运行时错误 – Stefano 2011-04-08 05:47:27

+0

@ Stefano:请参阅已编辑的答案。 – 2011-04-08 08:33:45

+0

@ise它在运行时给我一个错误:arr是单位化的。我用一个可能很重要的东西来编辑我的问题 – Stefano 2011-04-08 14:32:32

0

正如号码,你应该通过数组的地址:

GetArray(&array, &number) 

但随着C++,你的生活更美好唱参考参数。

+0

好吧,但我不明白我应该如何声明数组变量传递给函数。你能解释我吗? – Stefano 2011-04-07 17:23:55

0

数组变量是指向数组第一个元素的指针(它的值是第一个元素的地址)。

void GetArray(Object* dest, size_t* count) 
{ 
    dest = source; // source's value is an address; just copy it to dest 
    *count = N; 
} 
... 
GetArray(array, &number); // array's value is an address so you don't need "&" 
+0

好吧,但我有一个问题:计数是数组的大小调用GetArray函数后,我需要循环数组。现在,数组应该如何声明? – Stefano 2011-04-07 17:48:40

+0

你的周期是什么意思? (int i = 0; i <(int)number; i ++) – jfs 2011-04-07 17:55:22

+0

我的意思是使用此代码来循环数组: – Stefano 2011-04-07 17:56:42