使用 typedef 通过引用传递参数

Use typedef for passing parameters by reference

我的学校项目说明中有这部分内容:

In hw_numbers.h define type hw_number_array (for passing arguments to functions by reference). To store numbers in that array, use array of unsigned long.

我的朋友给了我提示,它应该是这样的:

typedef unsigned long hw_number_array[];

谁能解释一下,我为什么要用它来传递数组给函数?
如果不定义数组的实际大小,这种类型怎么可能存在?

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

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

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

调用此类函数时,似乎可以通过引用传递数组:

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

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

您可以尝试以下代码:

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