C 資料型別及其轉換詳解

2022-09-26 02:12:10 字數 2555 閱讀 2310

前言

在c#中,資料型別可以分為以下幾種型別:

值型別(value types)引用型別(reference types)指標型別(pointer types)

其中指標型別只在不安全**下使用,一般不涉及所以今天不討論。我們主要**引用型別和值型別。

一、基本定義

值型別的變數在宣告後,系統直接在託管棧中為其分配記憶體並儲存其資料,其中值型別包括:byte,short,int,long,float,double,decimal,char,bool 和 struct等,當我們宣告乙個引用型別時,系統並不會立刻在託管堆上分配空間,只有當我們使用new例項化後,系統才在託管堆上開闢乙個記憶體空間儲存其資料,並且將位址儲存到託管棧中, 引用型別包括陣列、類、介面、委託、資料等,所以引用型別不包含儲存在變數中的實際資料,而是儲存實際資料的引用,如有多個引用變數操作時,只要有乙個變數將值改變,其他變數會自動反映這種值的變化,比如我們申明了以下變數:

static void main(string args)

htwkjfk\n年齡:\n班級:");

console.readline();

}那麼按照上面的分析,由於age是值型別,name和classname為引用型別,所以age直接在託管棧中儲存變數和資料,而name和classname則儲存的是乙個引用,這個引用指向託管堆,託管堆裡面才儲存相應的資料。

這兩者既有聯絡又有區別,並且這兩之間可以轉化,就是我們說的「裝箱」操作和「拆箱」操作,相同點和不同點總結如下:

二、相同點

三、不同點

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

system.valuetype直接繼承system.object,但system.valuetype本身是乙個類型別,而不是值型別;system.vawww.cppcns.comluetype沒有新增任何成員,但覆蓋了所繼承的一些方法,

使其更適合於值型別。此外需要特別注意的是string型別雖然為引用型別,但我們在平時操作時卻發現它更像值型別,這是因為操作符過載的結果,但它仍為引用型別。

其資料型別的繼承關係如下:

四、資料型別轉化:

上面分析的c#的資料型別後,那麼我們可能會想到這些型別之間的相互轉換,我麼資料型別轉換從根本上說是型別鑄造,或者說是把資料從一種型別轉換為另一種型別。

在 c# 中,型別鑄造有兩種形式:

下面介紹三種經常使用的顯示型別轉換:

4.1 值型別的強制轉換

(資料型別)  變數名或值。這種型別的強制轉換通常使用在值型別之間。比如在資料庫設計的時候,使用者表(user)有性別字段***(0代表男,1代表女),我們一般用bit或者int型別儲存,介面上展示代表的值。這樣的好處是:

可以使**更易於維護,有助於確保給變數指定合法的、期望的值。列舉使**更清晰,允許用描述性的名稱表示整數值,而不是用含義模糊的數來表示,那麼我們在程式設計的時候就需要進行列舉型別的轉換。需要注意的是

這種型別的數值轉換,如果有小數點轉int型的時候系統不會四捨五入,而是簡單的捨棄。 轉換**如下:

static void main(string args)

///

/// 列舉:1表示男 2表示女

///

public enum gender : int

4.2 強制型別轉換parse

這種型別的數值轉換經常使用在字串轉數值型的情況下,需要注意的是,如果字串必須是有效的數字形式,如果無效系統回給出異常資訊,輸入字串的格式不正確。下面為字串轉數值和數值轉字串的**:

static void main(string args)

,myfloattostr=,myinttostr=", mydoubletostr, myfloattostr, myinttostr);

console.readline();

}4.3 萬能轉換器強制轉換convert

convert為萬能轉換函式,可以實現任意資料型別之間的轉換,使用起來沒有上面兩種條件苛刻,所以推薦大家使用。需要注意的是,在小數轉整型程式設計客棧的時候,如果有小數點,處理的規則跟www.cppcns.com第一種強制型別轉換不同,

其處理規則為:

///

/// 演示parse進行資料轉換

/// ghb by 2020-07-10

///

public static void parsedata()

\nmyfloat=\nmyint=\n" +

"mydoubletoint =\nmyfloattoint=\nmyinttodouble=\n",

mydouble, myfloat, myint,

mydoubletoint, myfloattoint, myinttodouble);

console.readline();

}從執行結果可以看到,88.5和87.5轉化為整型的時候,都是88。

五、總結

以上是本次分享的內容,我們首先分析了c#的資料型別,以及值型別和引用型別的區別,最後介紹了三種型別轉換的函式,以及他們的區別和使用場景,主要是對小數點的出來規則。

C語言中的資料型別及其轉換詳解

1.c語言中的資料型別 c語言中的型別按其組成可以分為簡單型別和構造型別,按是否預定義了型別名字和值集可以分為基本型別和非基本型別,按是否加了型別限定符可以分為限定型別和非限定型別。ansi c99標準中型別定義的bnf語法如下圖。說明 1 define pointer int 2 pointer ...

java 資料型別及其轉換

byte型別佔的空間是8位,取值範圍是 128 127。賦值時如下 byte i 2 輸出 2 byte i 128 這個時候編譯器會報錯 要進行強轉 byte i byte 128 輸出的結果 128 short型別佔的空間是16位,取值範圍是 short i 2 輸出 2int型別佔的空間是32...

C C 中資料型別轉換詳解及其作用介紹

目錄 在日常的開發中,我們經常會用到資料型別轉換,所以我們要對資料型別轉換有一定的了解.在 c 中,某些標準型別的資料之間可以自動轉換.隱式型別轉換 由 c 編譯系統自動完成的,我們無需干預.例如 int main 輸出結果 強制型別轉換 在程式中將一種型別資料明確轉換成另一指定的型別.例如 int...