【问题标题】:Get an array via function-param通过函数参数获取数组
【发布时间】:2011-04-07 17:03:37
【问题描述】:

我有一个声明为的数组

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)

编辑 2

static Object array[N]

【问题讨论】:

  • 你想做什么?将数组的值复制到另一个数组或将两个数组指向相同的数据?
  • 将两个数组指向同一个数据

标签: c++ arrays void-pointers


【解决方案1】:

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

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

【讨论】:

  • @ise 我用实际代码编辑了我的问题,它编译得很好但是当我编译时我有一个关于未初始化变量的警告并且程序停止工作并出现运行时错误
  • @ise 它在运行时给了我一个错误:arr 是未初始化的。我用可能很重要的东西编辑了我的问题
  • @Stefano:奇怪......我无法重现你提到的问题。这里是a test on ideone
  • @ise 对不起我的错,我忘记了函数参数中 Object* 之后的 &
  • @Stefano:我明白了,没问题 :-)
【解决方案2】:

和数字一样,你应该传递数组的地址:

GetArray(&array, &number)

但是对于 C++,最好使用引用参数。

【讨论】:

  • 好的,但我不明白我应该如何声明要传递给函数的数组变量。你能解释一下吗?
【解决方案3】:

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

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 "&"

【讨论】:

  • 好的,但我有一个问题:count 是数组的大小,因为在调用 GetArray 函数后我需要循环数组。现在,数组应该如何声明?
  • 我的意思是用这段代码循环数组:for (int i = 0; i
  • 是的,我知道如何循环数组,但我不明白我应该如何声明“数组”变量。要声明一个数组,我需要维度,维度是 count
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2019-04-20
  • 2019-08-16
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 2015-09-27
相关资源
最近更新 更多