2016-07-03 53 views
1

我正在學習有關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 
} 

我得到以下錯誤:

類型的引用「學生&」(未常量限定)不能與類型的值被初始化「學生[100]」
錯誤C2440「初始化」:無法從「學生[100]」轉換爲「學生&」

+2

地址簿的類型不是'student',而是'student [100]'。而且你不想學習引用數組。只需使用一個指針/迭代器。 – KABoissonneault

回答

4

類型的引用必須匹配它指的是。對單個學生的引用不能指100個學生的數組。您的選擇包括:

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

// Refer to all students 
student (&all)[100] = addressbook; 
auto &all = addressbook;    // equivalent 
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的標準庫中可以看到此示例。