我正在学习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&'
答案 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
。