C ++ - структурирует ... выпуск параметров функции - PullRequest
1 голос
/ 22 января 2011

В: 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 ]

4 голосов
/ 22 января 2011

Это означает, что в качестве первого аргумента будет принята ссылка на DateStruct и эта ссылка будет называться sDate в теле функции. Ссылка sDate затем используется в каждой строке тела:

sDate.nMonth = nMonth;
sDate.nDay = nDay;
sDate.nYear = nYear;
4 голосов
/ 22 января 2011

Это означает ссылку на существующий экземпляр DateStruct.

0 голосов
/ 22 января 2011

Вышеупомянутый выделенный код называется ссылкой .Вы можете рассматривать ссылки как псевдонимы для переменных.

Во время вызова функции sDate становится псевдонимом для sToday, который был задан в качестве параметра.Таким образом, это позволяет изменить sToday изнутри функции!

Причина в том, что она позволяет задавать сложные структуры, которые могут быть заполнены данными, модифицированы и т. Д. Внутри вызываемых функций.

В вашем случае функция SetDate занимает отдельноегод, месяц и день - и упаковывает его внутри sDate (== sToday) структуры.

Просто сравните первый способ инициализации (вам нужно упомянуть все члены структуры самостоятельно) к вызову SetDate функции.

например:

DateStruct janFirst;
DateStruct decLast;

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

Сравните это с тем, сколько кода было бы написано, если бы вам пришлось заполнить все эти janFirst, decLastконструкции вручную!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...