C 學習筆記(基礎知識回顧)之值型別和引用型別

2022-07-17 05:18:10 字數 1960 閱讀 7293

一:c#把資料型別分為值型別和引用型別

1.1:從概念上來看,其區別是值型別直接儲存值,而引用型別儲存對值的引用。

1.2:這兩種型別在記憶體的不同地方,值型別儲存在堆疊中,而引用型別儲存在託管對上。儲存位置的不同會有不同的影響。

例如int型別是值型別:int x,y; x=10;y=x;y=20;前三個語句會在記憶體的兩個地方儲存值10。改變y的值不會影響x。

如果已經定義了乙個類test,test是乙個引用型別,有乙個int型別的成員變數value,執行完如下**後,只有乙個test物件。x和y都指向包含該物件的記憶體位置,申明這兩個物件只保留乙個引用而不會例項化給定型別的物件。建立物件必須使用new關鍵字。由於x和y引用同乙個物件,所以對y的修改會影響x。因此結果為10和20

test x, y;

x=newtest();

x.value = 10;

y =x;

console.writeline("x的值為:"+x.value);

y.value = 20;

console.writeline("x的值為:" +x.value);

二:cts型別

2.1c#認可的基本預定義型別沒有內置於c#語言中,而是內置於.netframework中,例如申明乙個int型別的資料時,實際上是system.int32的乙個例項,其意義在於可以把所有的基本資料型別看成支援某些方法的類。例如把int i轉換為string,可以使用string s = i.tostring();

引用型別和值型別都繼承自system.object類。不同的是,幾乎所有的引用型別都直接從system.object繼承,而值型別則繼承其子類,即直接繼承system.valuetype。

預定義的值型別包括整形、浮點型別,decimal型別,bool型別,字元型別等。預定義的引用型別 根型別object型別,string型別。

2.2 string型別,string型別是引用型別,但是與引用型別常見的行為有一些區別。字串是不可改變的,修改其中乙個字串就會建立乙個全新的string物件,而另乙個字串不發生變化。string型別的很多操作反而看起來和值型別相似,例如:

三:關於值型別和引用型別判斷是否相等。

3.1 當比較兩個值型別時,進行的是內容比較;而比較兩個引用型別時,進行的是引用比較。示例如下:

3.2 string 是乙個例外,string比較可以直接使用==或equal(),clr對string型別的比較會比較其值而不是引用。這點看起來更像是值型別的特性,而實際上是過載了運算子 "==" 和方法equals ,系統解析的時候會直接比較string 的內容。

C 學習筆記(基礎知識回顧)之值傳遞和引用傳遞

c 學習筆記 基礎知識回顧 之值型別和引用型別 2.1在變數通過引用傳遞給方法時,被呼叫的方法得到的就是這個變數,更準確的說,是指向記憶體中變數的指標。所以方法內部對變數進行的任何改變在方法退出後仍然有效。而如果變數通過值傳遞給方法,被呼叫的方法得到的是變數的乙個相同副本,也就是說方法退出後,對變數...

c 基礎知識回顧

1.資料型別和類。所有程式設計都是處理輸入和輸出。關於輸入引數,從右至左把引數入棧,這樣根據棧基址,可以定位第乙個引數。因為很多函式是引數數量不定的,比如printf.關於輸出,記得輸出時,一般是把值放入eax 暫存器,所以一般資料型別,直接放入返回值資料,暫存器可以裝下,而返回物件,會返回物件的指...

C語言基礎知識回顧 資料型別

系統 windows10家庭和學生版 環境 miccrosoft visual studio 2013 include include include intmain 使用字元陣列來表示 printf s n str char ch this is a c pragma printf s n n c...