使用typedef通过引用传递参数

时间:2016-03-25 03:08:29

标签: c arrays function typedef

我在学校项目的指示中有这一部分:

  

hw_numbers.h 中定义类型 hw_number_array (用于通过引用将参数传递给函数)。要在该数组中存储数字,请使用unsigned long数组。

我的朋友告诉我,它应该是这样的:

typedef unsigned long hw_number_array[];

有人可以解释一下,我为什么要用它来传递一个数组呢? 如果不定义数组的实际大小,这种类型如何才能存在?

2 个答案:

答案 0 :(得分:0)

如果省略数组的大小,则称为未知边界数组。只有某些地方可以使用它,但函数参数就是其中之一。有一个特殊的规则,即使为数组给出了一个边界,也会忽略该边界,并且该参数等同于一个指针:

void f(int []) // this means void f(int *)

C ++从C继承了这个规则。一些程序员认为有必要记录一个数组是为参数传递的,而不是指向单个值的指针。

调用这样的函数时,似乎可以通过引用传递数组:

{
    int a[5];
    f(a); // actually passes an int pointer
}

但这实际上是一种错觉。数组衰减为指针,然后传递指针。

答案 1 :(得分:0)

以下是您可以尝试的一些代码:

typedef unsigned long hw_number_array[];

int main()
{
    unsigned long myArray[100];

    setValue(myArray, 5, 10);
    unsigned long value = getValue(myArray, 5);

    return 0;
}

unsigned long setValue(hw_number_array a, int  index, unsigned long value)
{
    a[index] = value;
}


unsigned long getValue(hw_number_array a, int  index)
{
    return a[index];
}