在:http://www.learncpp.com/cpp-tutorial/82-classes-and-class-members/
它有以下代码:
// 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
参数,尤其是我在函数体中看不到它的使用?
感谢。
答案 0 :(得分:4)
它表示对现有DateStruct实例的引用。
答案 1 :(得分:4)
这意味着它将第一个参数作为对DateStruct的引用,并且该引用将在函数体中称为sDate。 然后在身体的每一行使用sDate参考:
sDate.nMonth = nMonth;
sDate.nDay = nDay;
sDate.nYear = nYear;
答案 2 :(得分:0)
上述突出显示的代码称为a reference。您可能会将引用视为变量的别名。
在函数调用期间sDate
成为sToday
的别名 - 已作为参数提供。因此,它可以在函数中修改 sToday
!
原因是它可以在被调用函数内部提供可能被数据填充,修改等的复杂结构。
在您的情况下,SetDate
函数需要单独的年,月和日 - 并将其包含在 sDate
(== sToday
)结构中。
只需将第一种初始化方法(您需要自己提及所有结构成员)与调用SetDate
函数进行比较。
例如:
DateStruct janFirst;
DateStruct decLast;
SetDate(janFirst, 1, 1, 2011);
SetDate(decLast, 12, 31, 2011);
如果必须手动填充所有janFirst
,decLast
结构,请将其与已编写的代码进行比较!