c 引用引數傳遞的深入剖析

2021-04-13 01:49:02 字數 1064 閱讀 5742

在c#中,資料有2中基本型別:值型別和引用型別

值型別的變數儲存資料,而引用型別的變數儲存對實際資料的引用。

在引數傳遞時,值型別是以值的形式傳遞的,是將要傳遞的引數的值複製給函式的形參,因此在函式體類對於該形參的任何改變都不會影響原來的值;

引用型別是以物件引用的形式傳遞的,是將要傳遞的物件的引用複製給函式的形參,這時形參是實參引用的複製,注意:是引用的複製,而不是原引用,和原引用指向相同的物件,因此對於引用物件所做的更改將會直接影響原來的值,但是對於引用本身,在函式內的任何改變將不會影響原引用。

給乙個直觀的示例:

class a

class program

static void main()

}

結果是2而不是3也不是1.
ref串引數:
ref關鍵字使引數按引用傳遞。其效果是,當控制權傳遞**用方法時,在方法中對引數所做的任何更改都將反映在該變數中。若要使用ref引數,則方法定義和呼叫方法都必須顯式使用ref關鍵字。例如:
對於值型別,可以向上面的引用串引數一樣傳遞,對於已經是引用型別的引數,大家可能會說那不是多此一舉嗎?其實不然,因為其中的實機理完全不一樣:
考查上個示例的變種
class a

class program

static void main()

}

可以這麼理解,沒有ref時的引用物件的引數傳遞就相當於c++中的一般指標傳遞(函式宣告相當於: void f(type * v)),
而有ref時的引用物件的引數傳遞相當於c++中的一般指向指標的指標傳遞(函式宣告相當於: void f(type ** v)).

深入剖析C C 函式的引數傳遞機制

先看一下簡單的例子。void func1 int x 這個函式的引數使用值傳遞方式 當引數型別更複雜時,指標和引用傳遞方式在效率等方面的優勢更為明顯 不過那樣例子就不夠 簡單 了 void func2 int x 這個函式的引數使用指標傳遞方式 void func3 int x 這個函式的引數使用引...

深入剖析C 中的引用變數( )

函式的引數分為形參 parameters 和實參 arguments 在閱讀英文注釋或者檢視英文 的時候,可能常常會遇到這兩個單詞,應當知曉它們的區別。前者是在函式定義的時候採用的變數名,並沒有什麼實際的意義。後者則是在函式呼叫的時候實際傳入的引數。函式的引數傳遞方式可以分為值傳遞 指標傳遞和引用傳...

c 引數傳遞之引用引數

每乙個想要做到模組化程式設計的碼農都不可避免的乙個問題是引數傳遞 如果您在這裡覺得有疑問,誒,我不想做模組化呢,以筆者經驗這個你大可不必揪心,因為你的老師或者老闆會讓你做到的 以c語言為例,主調函式傳參給被調函式的情況中,87 的情況都是要改變引數的值。這時候有兩種方法做到這個,第一傳指標,一般情況...