如何将const数组或变量数组传递给C中的函数?

时间:2010-06-15 15:15:43

标签: c pointers arrays const immutability

我有一个简单的函数Bar,它使用数据集中的一组值,这些数据集以数据结构数组的形式传入。数据可以来自两个来源:默认值的常量初始化数组或动态更新的缓存。

调用函数确定使用哪些数据,并应传递给BarBar不需要编辑任何数据,实际上也不应该这样做。我应该如何声明Bar的数据参数,以便我可以从任何一组提供数据?

union Foo
{
long _long;
int _int;
}

static const Foo DEFAULTS[8] = {1,10,100,1000,10000,100000,1000000,10000000};
static Foo Cache[8] = {0};

void Bar(Foo* dataSet, int len);//example function prototype

注意,这是C,而不是C ++,如果这有所不同;

修改
哦,还有一件事。当我使用示例原型时,我得到一个类型限定符不匹配警告,(因为我将一个可变引用传递给const数组?)。我有什么需要改变的?

2 个答案:

答案 0 :(得分:9)

你想:

void Bar(const Foo *dataSet, int len);

参数声明const Foo *x表示:

  

x是指向Foo的指针   保证不会改变。

您可以使用此原型将非const指针传递到Bar

答案 1 :(得分:0)

正如您所做的那样 - 该函数采用指向数据的指针(如果不需要更改,则为const)

如果使用malloc分配数据,则传递指针;如果是静态数组,则传递第一个元素。