###参照渡しとポインタ渡しの違いを教えて下さい。
Visual Studio2010
MFCアプリケーション作成における質問です。
###定義した構造体など
C++
1typedef struct { 2 int a; //箱A 3 int b; //箱B 4 bool c; //フラグ用C 5} TEST, *PTEST; 6 7上記の構造体を定義したとします。 8 9次に、ヘッダーの定義として 10bool CTestProc::Test_One( TEST& TestData); 11bool CTestProc::Test_Two( PTEST TestData); 12 13上記2つを定義します。 14 15○実際使うとき 16 17void foo() 18{ 19 TEST data; 20 21 //Twoを実行後にOneを実行 22 CTestProc::Test_Two(&data); // ポインタ渡し 23 CTestProc::Test_One(data); // 参照渡し 24 25 //上記2つの関数実行後のa,b,cの値を出力。 26 AfxMessageBox(_T("%d"),data.a); 27 AfxMessageBox(_T("%d"),data.b); 28 AfxMessageBox(_T("%b"),data.c); 29} 30 31とあったとします。
###質問したいこと
C++
1○質問1 2①参照渡しとは、Test_One内だけで有効な事ですか? 3bool CTestProc::Test_One(TEST& TestData) 4{ 5 TestData.a = 100; 6 TestData.b = 500; 7 TestData.c = TRUE; 8 9 //○質問2 10 //※100,500,TRUEはTest_Oneの中だけでしか変更されない。 11 // →つまり他の関数ではその値を使用できない? 12} 13 14 15bool CTestProc::Test_Two( PTEST TestData) 16{ 17 //○質問3 18 //①Test_Oneでの変更は反映されないので、 19 //ここでa,b,cの値は不定のまま?(初期化してないとして) 20 21 //○質問4 22 TestData.a = 200; 23 TestData.b = 800; 24 TestData.c = FALSE; 25 26 //ここで変更した値はTest_Twoの外でも反映されるってことですか? 27} 28 29void foo() 30{ 31 TEST data; 32 33 //Twoを実行後にOneを実行 34 CTestProc::Test_Two(&data); // ポインタ渡し 35 CTestProc::Test_One(data); // 参照渡し 36 37 //上記2つの関数実行後のa,b,cの値を出力。 38 //○質問5 39 //ここでの値は、twoの値である、200,800,FALSEが入っていますか? 40 AfxMessageBox(_T("%d"),data.a); 41 AfxMessageBox(_T("%d"),data.b); 42 AfxMessageBox(_T("%b"),data.c); 43} 44 45
###補足情報(言語/FW/ツール等のバージョンなど)
C++ VS2010 MFC
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/21 08:04
2017/03/21 08:27