2011-01-22 8 views
1

時:http://www.learncpp.com/cpp-tutorial/82-classes-and-class-members/C++ - 構造体...関数のパラメータの問題

それは、次のコードを持っています

DateStruct & SDATE

の目的は何
// 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); 

関数記号のパラメータature、特に私は機能の本体でそれの使用を見ることができないのですか?

ありがとうございました。

+4

お願いします** BOOK **を読んでください。 –

+0

これはarticelの別の場所に書かれています: "...私たちはSetDate()関数に最初のパラメータとして構造体自体を渡す必要がありましたが、そうでなければ、SetDate()は我々が動作させたいDateStructを知りません。 " – Simplicity

答えて

4

これは、最初の引数としてDateStructへの参照をとり、この参照が関数の本体でsDateと呼ばれることを意味します。 SDATE基準は、次に体の各ラインで使用される:前述の、強調表示されたコードはa reference

4

既存のDateStructインスタンスへの参照を意味します。

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

と呼ばれています。参照は変数のエイリアスと考えることができます。

sDateは、パラメータとして与えられたsTodayのエイリアスになります。したがって、それは可能になりますsToday関数内から!

なぜなら、呼び出された関数の中でデータで埋め尽くされ、変更されたなどの複雑な構造を与えることが可能になるからです。

あなたのケースではSetDate機能は独立した年、月、日を取る - とsDate(== sToday)構造の内部でそれパック。

SetDate関数を呼び出すには、初期化の最初の方法(すべての構造体メンバーを自分で言及する必要があります)を比較してください。

例えば:

DateStruct janFirst; 
DateStruct decLast; 

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

あなたが手ですべてのものをjanFirstdecLast構造を埋めるために持っていた場合には書かれていたであろうどのくらいのコードにこれを比較し!