3

问题是制作一个由 10 个整数组成的数组,这很好

int array[10];

现在的问题是

如何制作我上面声明的referencearray

我试过这个

int &ra = a;

但这给了我错误...请向我提供有关此错误的详细信息以及如何reference制作array.

4

4 回答 4

12
int (&ra)[10] = a;

或者,您可以使用 typedef 将其分隔为“10 个整数数组”的类型并对其进行引用,如下所示:

typedef int int10[10];
int10& my_ref = a;

你的问题int &ra = a;是它告诉编译器创建一个引用类型的引用int......array of 10 ints它们只是不一样的东西。考虑这sizeof(int)是十个数组大小的十分之一int——它们占用不同数量的内存。特定字符可以满足您对引用类型的要求,例如int& ra = a[0];.

我很欣赏这int* p = a;是允许的有点令人困惑 - 为了与不太安全的 C 兼容,指针可用于访问单个元素或数组,尽管不保留有关数组大小的任何信息。这是更喜欢引用的一个原因——它们比指针增加了一点安全性和功能。

对于增加功能的示例,您可以获取并获取数组 ( )sizeof(my_ref)中的字节数,而会给您指针 ( ) 的大小和. 您可以使用这样的代码“捕获”数组维度以在函数中使用:int10 * sizeof(int)sizeof psizeof(int*)sizeof *p == sizeof(int)

template <int N>
void f(int (&x)[N])
{
    std::cout << "I know this array has " << N << " elements\n";
}
于 2012-10-26T06:28:29.347 回答
3

对数组的引用将具有类型int (&a)[10]

int array[10];
int (&a)[10] = array;

有时使用简化一些事情可能会很有用typedef

typedef int (&ArrayRef)[10];
...
ArrayRef a = array;
于 2012-10-26T06:27:45.260 回答
1

这是对大小为 10 的整数数组的引用:

int (&ra)[10];

所以

int (&ra)[10] = a;
于 2012-10-26T06:27:19.603 回答
0

您可以 typedef 数组类型(类型不应不完整),如下所示:

#define LEN 10
typedef int (array)[LEN]; 

int main(void)
{
    array arr = {1, 2, 3, 4, 5};    //define int arr[10] = {1, 2, 3, 4, 5};
    array arr2;                     //declare int arr[10];
    array *arrptr = &arr;           // pointer to array: int (*arrptr)[10] = &arr;
    array &&arrvef;                 // declare rvalue reference to array of 10 ints
    array &ref = arr;               // define reference to arr: int (&ref)[10] = arr;
}
于 2021-09-30T08:26:38.963 回答