2011-01-22 92 views
1

在:http://www.learncpp.com/cpp-tutorial/82-classes-and-class-members/C++ - 結構...函數參數問題

它下面的代碼:

// Declare a DateStruct variable 
DateStruct sToday; 

// Initialize it manually 
sToday.nMonth = 10; 
sToday.nDay = 14; 
sToday.nYear = 2020; 

// Here is a function to initialize a date 
void SetDate(DateStruct &sDate, int nMonth, int nDay, int Year) 
{ 
    sDate.nMonth = nMonth; 
    sDate.nDay = nDay; 
    sDate.nYear = nYear; 
} 

// Init our date to the same date using the function 
SetDate(sToday, 10, 14, 2020); 

什麼是

DateStruct & SDATE的目的

函數符號中的參數特別是我看不到它在函數體中的使用?

謝謝。

+4

請請**請讀一本書**。 – 2011-01-22 12:49:52

回答

4

這意味着它將作爲第一個參數引用DateStruct,並且該引用將在函數的主體中被稱爲sDate。 ,其SDATE參考隨後在身體的各線使用的:

sDate.nMonth = nMonth; 
sDate.nDay = nDay; 
sDate.nYear = nYear; 
4

它意味着對現有DateStruct實例的引用。

0

前述,突出顯示的代碼被稱爲a reference。您可能會將引用視爲變量的別名。

函數調用期間sDate成爲sToday的別名 - 已將其作爲參數給出。因此它可以從功能內修改sToday

原因在於它可以給被調用的函數內部可能填充數據,修改等的複雜結構。

在你的情況SetDate功能需要單獨的年,月,日 - 和包裝它sDate(== sToday)結構。

只需比較第一種初始化方式(您需要自己提及所有結構成員)即可調用SetDate函數。

例如:

DateStruct janFirst; 
DateStruct decLast; 

SetDate(janFirst, 1, 1, 2011); 
SetDate(decLast, 12, 31, 2011); 

與此相比,多少代碼將如果你有手工填寫所有那些janFirstdecLast結構已被寫入!