对struct数组的引用

时间:2016-07-03 22:58:42

标签: c++ arrays visual-c++ struct

我正在学习C ++中的引用。是否无法创建对结构数组的引用?

struct student {
    char name[20];
    char address[50];
    char id_no[10];
};

int main() {
    student test;
    student addressbook[100];
    student &test = addressbook; //This does not work
}

我收到以下错误:

  

“学生与”类型的引用(不是const限定的)不能使用“student [100]”类型的值初始化   错误C2440'初始化':无法从'student [100]'转换为'student&'

2 个答案:

答案 0 :(得分:4)

引用的类型必须与它所指的相匹配。对单个学生的引用不能指代100名学生。您的选择包括:

// Refer to single student
student &test = addressbook[0];

// Refer to all students
student (&all)[100] = addressbook;
auto &all = addressbook;               // equivalent

答案 1 :(得分:4)

是的,这是可能的。它只需要是正确类型的参考。学生不是100名学生。但语法有点尴尬:

student (&test)[100] = addressbook;

一旦你读到这个内容会更有意义:http://c-faq.com/decl/spiral.anderson.html

您将看到数组引用的最常见位置可能是模板函数的参数,其中推断了大小。

template<typename T, size_t N>
void foo(T (&arr)[N]);

这允许您将数组作为单个参数传递给函数,而不会使其衰减为指针并丢失大小信息。

可以在标准库中看到std::begin/end