(筆記) struct對function可以pass by value嗎?可以return一個struct嗎? (C/C++)
时间:2011-02-18 来源:真 OO无双
Introduction
使用環境:Visual Studio 2010 / Visual C++ 10.0
C再傳遞資料進function時,就只有兩招,一招是pass by value,一招是pass by address,一些較小型的型別如int、double,我們會使用pass by value配合return,當然使用pass by address亦可;而一些較大的型別,如string、array、struct,我們會使用pass by address的方式,也就是只把pointer copy進stack,而不需將整個資料copy進stack,這樣比較有效率。
昨天好友Roger問我可以將struct以pass by value的方式傳進function,並且return一個struct嗎?
在實驗之前,我們先用既有的認知做推理:
1.根據以往的經驗,struct都是以pass by address的方式,所以不確定C compiler是否能接受struct pass by value的寫法。(須實驗)
2.就算C compiler能接受語法,是真的pass by value?還是只是pass by address的syntax suger? (須實驗)
3.就算C compiler能struct pass by value,效率一定遠比struct pass by address差,因為struct通常都很大,且需整個struct copy進stack,再整個struct從stack內copy出來。(這點可以確定)
接下來,我們來作實驗: