c 函式傳參 和 c 函式傳參的區別

2021-09-27 06:41:12 字數 1279 閱讀 2744

先看c#的

public static void getfilename(streamwriter sw, string path, int indent, listlistfile)

}listlistfile = new list();

filehandle.getfilename(sw, facepic, 2, listfile);

foreach (string p in listfile)

這裡我們使用listfile變數 new了乙個物件,傳參給函式getfilename中的 listfile.在該函式中處理完,返回,然後在該函式外邊再列印listfile變數的值,發現跟函式裡面是一樣的,這說明是同乙個物件。其實這裡隱藏了指標。

再來看c++**,如果要實現上邊的效果,該怎麼寫?

void getfilename(streamwriter sw, string path, int indent, list*listfile)

}list*listfile = new list();

filehandle.getfilename(sw, facepic, 2, listfile);

foreach (string p in listfile)

這裡我沒有嚴格按照c++的list標準寫法去寫,主要是修改了在c++裡如果要實現上邊c#的效果該怎麼做,首先需要表明listfile是乙個指標,new該物件。然後修改函式裡引數listfile也為指標,傳參給函式呼叫。listfile->指標要使用->。最後返回出來的結果才是listfile同乙個指標物件。

那麼如果c++也像c#那樣寫,會有什麼結果呢?

void getfilename(streamwriter sw, string path, int indent, listlistfile)

}listlistfile;// = new list();

filehandle.getfilename(sw, facepic, 2, listfile);

foreach (string p in listfile)

結果就是在函式呼叫外邊得不到和函式裡面相同的結果,因為是兩個物件。當我們向函式傳參listfile時,此時在函式裡面已經產生了乙個新的listfile物件,跟傳進的引數一模一樣,但是他們的位址不一樣。我們在函式裡操作listfile物件,並沒有操作我們函式外邊那個傳參的listfile物件。這顯然不是我們想要的。所以c++使用指標指明記憶體位址操作的是哪乙個物件。

c 函式的傳參

在闡述c 中函式傳參之前,先說明一下為何寫這篇部落格。事實上,c 的傳參方式的討論已經很多,但是在解劍指 offer 27.二叉樹的映象 leetcode 226翻轉二叉樹 時發現三種傳參方式自己並沒有完全弄清,在以樹指標為物件時,就出現錯誤。網上有三種常見的交換變數的方式,第一種建立臨時變數儲存其...

c 引用傳參和變數傳參區別

引用傳參會改變這個引數本身的值,而變數傳參不會改變引數本身的值。引用還有乙個好處就是在傳遞引數的時候不會產生過多的記憶體拷貝,這在傳遞結構體或者類的時候,可以節省很多時間和空間。include using namespace std void fun1 int int void fun2 int i...

python 函式傳參 傳參和傳引用

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...