C ++ - structs ...函数参数问题

时间:2011-01-22 12:47:09

标签: c++ struct

在: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

函数签名中的

参数,尤其是我在函数体中看不到它的使用?

感谢。

3 个答案:

答案 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);

如果必须手动填充所有janFirstdecLast结构,请将其与已编写的代码进行比较!