2011-01-22 49 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结构已被写入!