c 中的資料型別與轉換

2022-07-06 17:36:11 字數 4703 閱讀 4924

資料型別轉換
using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

csharp

,轉換的整數值為:

", tr, num);//

如果轉換成功就賦值否則就是0

int a = 5

;

int b = a++ + ++a * 2 + --a + a++;//

5+7*2+6+6=31 在計算機中++或--是一元運算子,而+-*/%是二元預演算法,計算機會先執行一元在算二元預演算法。

console.writeline("

b的結果為:

" + b + "

,而a的結果為:

" + a);//

b=31,a=7

console.writeline(a += b);//

a+=b等同於 a=a+b

//常量const的定義:在整個程式中一直保持不變的量,

const

double r = 3.14;//

如:圓周率=3.14 一直保持不變, 而已整個程式中常量不能被重新賦值。

//r = 0;

//重新給常量賦值就報錯,程式不允許給常量賦值,常量常用於一些固定的量。

//變數的區別

int r = 11

; r = 22;//

變數是可以進行賦值的,常量不可以賦值

//匿名變數可以是任意型別(具有動態型別的特徵,不需要明確指定型別,減少**量,提高效率) 但定義變數時必須賦值明確變數資料型別。

var strvar = 1;//

var 定義匿名函式,相當於 int a=1; ,匿名函式可以是任意型別,使用時也會自動識別

var strvar1 = "a"

;

var strvar2 = 1.1

;

var strvar3 = true

;

var strvar4 = new list() ;

//讀取資料型別

console.writeline(strvar.gettype().name);

console.writeline(strvar1.gettype().name);

console.writeline(strvar2.gettype().name);

console.writeline(strvar3.gettype().name);

console.writeline(strvar4.gettype().name);

console.writeline(

"------------------");

console.readkey();

console.readline();

//利用接收輸入來暫停程式,避免程式一閃而過

} }

}

/*資料型別(兩種):
* 值型別:基本資料型別:int double float..... 結構 列舉 等等都是值型別

* 引用型別(3種):字串 陣列 類 ;另外乙個object是什麼型別都能裝,他是所有型別的父類。所以object型別也屬於引用型別。

*/人為把記憶體分成五個區域在c#用到的就3個:棧中存值型別的,堆中存引用型別的,靜態儲存區域中存的是靜態成員。

字串值不可變性(堆的不可變性):當乙個字串被重新賦值後原來值並沒有銷毀,而是重新開闢空間儲存新值。

當程式結束後,gc會掃瞄整個記憶體,如果發現空間值沒有被指向,就會立即把他銷毀。

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading.tasks;

namespace

csharp

", xx);

//值型別:儲存在棧中,變數中儲存的是實際值,可以快速訪問 如果定義int a;不賦值預設 a = 0; 值型別沒有null空值

int a = 10;//

變數的作用域僅限於當前大括號以內,就是只在當前main方法中有效

jisuan.changenum(a);//

值傳遞,傳遞的只是乙個複本,傳過去的值num也只在changenum方法的大括號中有效

console.writeline("

a =

", a);//

因此這裡的a依然是10沒有任何變化

//引用型別:儲存在堆中,變數中儲存的是位址,通過位址查詢,訪問慢。 string str; 不賦值預設 str = null 空值

int arr = ;//

arr儲存的不是某乙個元素,而是是陣列的首位址

//引用型別是位址傳遞,傳遞的是記憶體位址,操作的是同一塊記憶體空間

jisuan.changenum(arr);//

傳過去=告訴他儲存的首位址是多少,找到這個位址進行操作,實際上就是指向同乙個記憶體空間中進行操作

console.write("

陣列元素會被乘以10,如下:");

foreach (int num in

arr)

// jisuan.changenum(ref a);//

方法也需要有ref關鍵字

console.writeline("

\n關鍵字ref下的a =

", a);//

此時a = 11

person mj;

//= new person();

//結構體可new可不new,類必須new。列舉本質就是乙個變數型別

mj.yue =month.二月;

//把列舉轉換為整型,這就是列舉和整型值的關係,列舉成員不能有第乙個字元不能是整型值的原因,把其他型別變為整型就可以和列舉型別轉換

console.writeline("

列舉下的值: =

", mj.yue, (int)month.二月, (month)11);//

整型轉列舉:(列舉名)整型值 11得到六月

//將字串轉換成列舉型別,所有資料型別轉換成字串都可以呼叫tostring()

month month = (month)enum.parse(typeof(month), "

三月");//

如果沒有找到對應的值就報錯

console.writeline(month);

//結構和列舉一樣本質就是乙個變數型別

console.readline();}}

//////

在同乙個類中,方法名相同引數列表不同叫方法過載。 靜態類下面的所有屬性都是靜態的;

/// static

class

jisuan

public

static

void changenum(int

arr)

}public

static

void changenum(ref

intnum)

}//////

列舉:關鍵字enum基本資料型別是整型,用來表示一些常數,每個列舉的成員預設帶有乙個整型值,預設0開始,其他成員是前乙個成員值加1。

///作用: 1來代替男,2來代替女 的用法。

/// public

enum month//

注意:列舉基本資料型別是整型,所以不允許整型值開頭,如:1月這樣的程式就報錯。

//////

結構體:struct關鍵字,和類差不多,語法:訪問修飾符 struct 結構名

///結構和類的區別:1.結構是值型別,類是引用型別;2.結構字段不能有初始值,類可以有。3.結構呼叫可new可不new,類必須new。4.結構不能定義無參構造,類可以。

/// public

struct

person

//////

列舉型別的屬性 public公開的作用加了才能在外部訪問,沒有的就只能在結構體裡面訪問

/// public month yue; //

這裡的yue不叫變數叫字段,結構中欄位不能賦值,類可以賦值可以不賦值。

//public string _name;

//姓名 命名規則 _變數名, 意思是給外面宣告乙個 person 型別的乙個變數 賦值如 person._name = 值;

//public int _age;

//年齡

}}

C 資料型別與型別轉換

一 資料型別 值型別型別 描述範圍 預設值bool 布林值true 或 false false byte 8 位無符號整數 0 到 255 0char 16 位 unicode 字元 u 0000 到 u ffff 0 decimal 128 位精確的十進位制值,28 29 有效位數 7.9 x 1...

C 中資料型別轉換

1 使用parse方法 該方法只能將字串型別轉換成其他資料型別,語法格式 資料型別.parse string 資料型別可以是 int16,int32,int64,double,float,char,datetime中的任一種。2 使用convert方法 可以把任意型別轉換成其他型別,語法格式 con...

C 中資料型別轉換

1 顯示轉換 又稱強制轉換 float a int b a float b 2 隱式轉換 該轉換只適用於數值型別資料間的轉換 sbyte byte short ushort int uint long ulong float char short b int a a b 3 非字串型別轉字串型別或字...