【问题标题】:C++ - structs... function parameter issueC ++ - 结构......函数参数问题
【发布时间】:2011-01-22 12:47:09
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 读一本书
  • 这是在文章的另一个地方写的:“......我们需要将结构本身作为第一个参数传递给 SetDate() 函数。否则,SetDate() 不会知道什么我们想要处理的 DateStruct。”。

标签: c++ struct


【解决方案1】:

这意味着它将把对 DateStruct 的引用作为第一个参数,并且该引用将在函数体中称为 sDate。 然后在正文的每一行中使用 sDate 引用:

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

【讨论】:

    【解决方案2】:

    表示对现有 DateStruct 实例的引用。

    【讨论】:

      【解决方案3】:

      上述突出显示的代码称为a reference。您可能会将引用视为变量的别名。

      在函数调用期间,sDate 成为 sToday 的别名 - 它已作为参数给出。因此,可以在函数内修改 sToday

      原因是它可以提供复杂的结构,这些结构可能会在被调用的函数内部填充数据、修改等。

      在您的情况下,SetDate 函数需要单独的年、月和日 - 并将其打包 sDate (== sToday) 结构中。

      只需将第一种初始化方式(您需要自己提及所有结构成员)与调用SetDate函数进行比较。

      例如:

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

      比较一下如果你必须手动填充所有janFirstdecLast 结构会编写多少代码!

      【讨论】:

        猜你喜欢
        • 2011-02-27
        • 1970-01-01
        • 2022-11-29
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        相关资源
        最近更新 更多