二 C 資料型別

2022-03-01 18:41:49 字數 4888 閱讀 9126

c#語言的基本型別包括8種整數型別、2種用於科學計算的二進位制浮點型別、1種用於金融計算的十

進製浮點型別、1種布林型別以及1種字元型別。

2.1 基本數值型別

c#中的基本資料型別都有關鍵字和它們關聯

c#的所有基本型別都有乙個短名稱和乙個完整名稱。完整名稱對應於bcl中命名的型別。這個名稱在所有語言

中都是相同的,而且它對程式集裡的型別進行了惟一的標識。因為基本資料型別是其他型別的基礎,

所以c#為基本資料型別的完整名稱提供了短名稱或者縮寫。其實從編譯器的角度看,兩種名稱是完全一樣

的,最終都將生成同樣的**。

2.1.2 浮點型別

浮點數的精度是可變的。如果讀取本來是0.1的乙個浮點數,那麼可能很容易讀取成0.099999999或者

0.100000001或者其他非常接近0.1的乙個數.

float  有效數字7位  32bit

double 有效數字15-16位64bit

2.1.3 decimal型別

128bit  有效數字 28-29位,

與浮點數不同,decimal型別保證範圍內的所有十進位制數都是精確的。

比浮點數的精度高,但是範圍小。

decimal型別的基數是十進位制的,浮點型別的基數是二進位制的。

2.1.4字面值

直接將乙個值放到源**中的行為稱為硬編碼,因為所以若是更改了值,就必須重新編譯**。一般可以

考慮叢個外部**獲取值,比如從乙個配置檔案中,這樣一來,以後需要修改時候,就不需要重新編譯**了。

如system.console.writelin(100);

2.2更多基本型別

bool char string

字串注:@

屬性具有賦值方法和聚會方法的特殊方法,但是要使用欄位的語言來訪問那些方法。

string型別是不可變的,沒有機制可供修改乙個字串的內容。只能重新賦值。

stringbuilder

當大量字串需要修改,使用stringbulider 會修改變數中的資料,而不是返回乙個新的字串。

2.3 null 和 void

與型別有關的兩額外的關鍵字是null和void。

null值表明變數不引用任何有效的物件,void表示沒有型別,或者沒有任何值。

1、null

null值只能賦給引用型別、指標型別和可空值型別。

從而使引用不指向任何位置。

沒有賦值的引用與賦值null的引用不同。

沒有賦值的引用,指向乙個位置,但是通常不清楚該引用指向的位置,會造成記憶體訪問的衝突之類的。

賦值null的引用,表明不指向任何位置。

2、void

void本質並不是乙個資料型別,它只是用於指出沒有資料型別這一事實。

隱式型別(匿名型別 anonymous type)的區域性變數:c# 3.0新增了乙個上下文關鍵字var,

它用於隱式型別的區域性變數,只要**在宣告的同時初始化乙個變數,就允許變數的資料型別是隱式的,但是生成 的cil**中,資料型別是固定(根據初始化的值判定)。

**:

1             system.console.write("

enter text:");

2var text=system.console.readline();34

var uppercase =text.toupper();

5system.console.writeline(uppercase);

6var patent1 = new ;

78 console.writeline(patent1.title + "

," + patent1.content);

這種形式的操作是連線資料型別的關鍵,同時還能將特定的型別縮減為更少的資料元素,從而有效地

減少型別的大小。

2.4 型別的分類

所有型別都可以劃分為兩類:值型別和引用型別。它們的區別**於它們的複製方式:值型別的資料問題

總是值被複製放到一塊新的記憶體當中,而引用型別總是記憶體位址被複製到新一引用上。

值型別的變數直接包含值,也就是說變數引用的位置就是值在記憶體中實際儲存的位置(直接定址)。

引用型別和引用它們它們的變數指向資料儲存位置(間接定址),引用型別並不直接儲存資料實際值,而是儲存了此實際資料存放地(某一塊記憶體當中)的記憶體首位址。

為了訪問實際資料,執行時 要從引用型別的變數中讀取此記憶體位置,然後再到此記憶體區域取得實際資料。

引用型別指向的記憶體區域稱為堆(heap)。使用new申請的

引用型別實際儲存的資料就是乙個整型資料,根據處理器32位 或者  64位

2.5可空修飾符

一般來說,null值不能賦給值型別。因為值型別不能包含引用。

為了宣告可以儲存null的變數,要使用可空修飾符 ?

將null賦給值型別,這在資料庫程式設計中尤為有用,在資料表中,經常出現值型別的列允許為空的情況

如:int? count=null;

2.6資料型別之間的轉換

有可能造成丟失數量級或者引發異常的任何轉換都需要執行顯式轉型。

不會丟失數量級,而且不會引發異常的任何轉換都屬於隱式轉型。

2.6.1顯式轉型

使用轉型運算子

如:long longnumber = 21512351235;

int intnumber = (int)longnumber;

注:checked和unchecked轉換

在checked塊內,如果在執行時發生一次溢位的賦值,就會引發乙個異常。

在unchecked塊內,如果發生溢位,它會將資料截斷,而不是為塊中的賦值引發異常。

注:c#不存在從乙個數值型別到乙個布林型別的有效型別。

2.6.2隱式轉型

無需使用轉型運算子。

2.6.3 不進行轉換的型別轉換

由於沒有定義從字串到數值型別的轉換,因此需要使用像parse()這樣的方法,每個數值資料型別都包含

乙個parse()方法,它允許將字串轉換成對應的數值型別。

如:string cc= "9.11e-31";

float a = float.parse(cc);

還有一種特殊型別,可以利用它將一種型別轉換成另一種型別。convert

不過convert只支援預定義的資料型別(基本型別),而且是不可擴充套件。它允許從任何基本型別轉換到

其他基本型別。

注:tryparse()

string cc = "9.11e-31";

float result;

float.tryparse(cc, out result);

parse()和tryparse()區別在於,

1、parse返回轉換後的資料,並且如果轉換失敗,會引發異常

2、tryparse返回值是乙個布林值,代表是否轉換成功,並且如果轉換失敗,並不會引發異常

2.7陣列

陣列的宣告

一維陣列

資料型別[ ]    陣列名;

二維陣列

資料型別[ , ]    陣列名;

多維陣列

資料型別[ , ,,,]    陣列名;

交叉陣列

陣列型別 陣列名

注:交叉陣列的每乙個元素是乙個陣列(必須使用new來初始化)。

陣列的例項化和賦值

1、宣告陣列的同時進行賦值

string languages = ;

只有在同乙個語句宣告並賦值時才可以省略new,如果是在宣告之後才進行賦值,則需要使用new關鍵字和對應的資料型別

2、宣告之後再進行陣列賦值

string languages;

languages=new string;

自c#3.0起,不必在new後面指定陣列的資料型別,只要陣列元素的資料型別是相容的即可,但是方括與仍是需要的。

3、宣告的同時使用new進行陣列賦值

c#還支援將new關鍵字作為宣告語句的一部分使用

string languages = new string ;

使用new關鍵字,會讓 執行時 為資料型別分配記憶體。

4、使用new關鍵字進行宣告和賦值,並指定大小。

不論何時用new關鍵字作為陣列賦值的一部分,都可以同時在廣播號內指定陣列的大小。

string languages = new string[5] ;

5、分配陣列,但不指定初始值

string languages = new string[5];

分配乙個陣列但不指定初始值仍然會初始化每個元素。執行時 會將每個元素初始化為它們的預設值。

引用型別:null

數值型別:0

bool:false

char:'\0'

6、在執行時定義陣列大小

size在執行時指定;

new string[size];

二維陣列的初始化

int[,] cells = new int[,] ,

};int[,] cells =  ,

};注:且大小不一致的多維陣列會造成錯誤;

交叉陣列:

int cells = new int ,

new int

};int cells = ,

new int

};陣列的屬性和方法

1、長度

length 陣列的長度是固定的,不能隨便更改,除非重新建立陣列。

對於交錯陣列,length返回的是外部陣列的元素數-----交錯陣列是由陣列構成的乙個陣列,所以length

只用於外部陣列,統計它的元素數(也就是具體由多少個陣列構成 ).

2、方法

靜態方法sort() binarysearch() reverse() 和 clear()等。

例項方法:getlength() rank clone()

2.7.4字串可作為陣列使用

但是也是不可變的陣列。

C 碎片二 資料型別

一 概述 c 語言包含的資料型別如下圖所示 2.1 整型 整形包括短整型 整形和長整形。2.1.1 短整形 short a 1 2.1.2 整形 一般佔4個位元組 32位 最高位代表符號,0表示正數,1表示負數,取值範圍是 2147483648 2147483647,在記憶體中的儲存順序是地位在前 ...

二 資料型別

短整型 short 2位元組 整型 int 4位元組 長整型 long 8位元組 雙長整型 long long 8位元組 單精度浮點型 float 4位元組 7位有效數字 3.14f 雙精度浮點型 double 8位元組 15 16位有效數字 3.14 預設情況下,輸出乙個小數,會顯示6位有效數字 ...

C語言初學(二)資料型別

c語言資料型別包括基本型別 整型 字元型 實型 列舉型別 指標型別 構造型別 陣列型別 結構體型別 共用體型別 以及空型別四大型別。基本資料型別 其值不可以再分解為其他型別的型別,類似於細胞 構造資料型別 採用構造方法構造乙個或多個資料型別 指標型別 指標是一種特殊的,同時又具有重要作用的資料型別 ...