我在学校项目的指示中有这一部分:
在 hw_numbers.h 中定义类型 hw_number_array (用于通过引用将参数传递给函数)。要在该数组中存储数字,请使用unsigned long数组。
我的朋友告诉我,它应该是这样的:
typedef unsigned long hw_number_array[];
有人可以解释一下,我为什么要用它来传递一个数组呢? 如果不定义数组的实际大小,这种类型如何才能存在?
答案 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];
}