一、c++定義了一系列的內建基本型別,包括算數型別(arithmetic type)和void型別,其中算數型別有字元,整形,浮點和布林型。
1、布林型:只有兩種取值,true和false;
2、字元型:c++定義了多種字元型別
(1)char是基本的字元型,乙個char要保證在機器中放置和字元相關的數值,即比如ascii值。所以char通常和乙個機器位元組一樣大。
(2)剩下的wchar_t、char16_t、char32_t用來擴充套件字元放置。wchar_t保證能夠存放任何最大的機器擴充套件字元,char16_t和char32_t用來存放統一碼。
3、整形有short、int、long int、long long,其中long long是c++11新標準中加入的。他們的最小空間分別是short 2位元組,int 2位元組,long int 4 位元組,long long 8位元組。並且他們的關係是:int 至少和short 一樣長,long 至少和int 一樣長,long long 至少和long 一樣長。
4、浮點有float(4位元組)、double(8位元組)、long double(12或16位元組),float一般能夠保留7為有效數字,double一般能保留16位有效數字。
關於signed和unsigned:
(1)各種型別除bool之外,其餘預設都為signed型別,如果要定義unsigned型別就在型別前加unsigned,只有unsigned預設為unsigned int 。
(2)c++明確說明應該把數值範圍均分用來表示正數和負數。比如signed char 無符號是為0-255,有符號時是-128-127。
型別使用的說明:
(1)在明確知道數值不為負的情況下使用unsigned型別,書上這麼說,但是我覺得在使用unsigned如果和signed型別計算時會把signed轉換為unsigned,容易出錯,而預設型別是signed的,這樣雖然得到了更大的儲存範圍,但是程式和能比較容易出問題。
(2)整形一般用int表示,因為short太短了,而long在大多數實現中和int相同,因此用int比較好,在數值很大的時候用long long。
(3)浮點型一般用double,因為float精度太小,long double用的比較少。
關於型別轉換:
(1)把浮點型賦值給整形時,會丟失小數點後面的值,
int a=3.14 //a=3
也有可能整數部分太大而整形無法儲存。
(2)把整形賦值給浮點時,會把整形轉換為浮點。
double b=5 //b=5.0
(3)當把乙個超出範圍的值賦給乙個unsigned型別時,儲存的值是目標型別能儲存的最大值除以該值的餘數。比如把-1給unsigned char,得到255。
(4)當把乙個超出範圍的值賦給乙個signed型別時,結果是未定義的。
(5)當乙個unsigned值和乙個signed值乙個進行運算時,會把signed值轉換為unsigned。
二、變數
關於變數的初始化:
c++11中變數的初始化有4種方式:
//a=1
int a=1;
int b(1);
int c=;
int d;
前兩種方式和後兩種方式最大的區別是用{}來初始化會更加的安全,用{}初始化是是不允許數值丟失的,即不能
int a
而前兩種則可以通過。
三、復合變數
復合變數是依據其他變數定義的,這裡說明引用和指標。
1、引用:
引用可以理解為被引用變數的另乙個名字,可以用它來間接操作被引用變數:
int a=1;
int &b=a; //b為a的乙個引用
則b是對a的乙個引用,操作b即是操作a。
需要注意的:
(1)引用必須與被引用的變數是相同型別。
(2)引用必須在定義時初始化,一經初始化無法改變。
2、指標:
指標也是一種可以間接操作其他變數的型別:
int a=1;
int *p=&a;//p為指向a的乙個指標,&意為取位址
這樣可以通過*p來對a進行a能夠進行個任何操作。
指標和引用的區別:
(1)指標是乙個變數而引用不是,指標有自己的記憶體空間,空間內是目標變數的位址值,而引用沒有。
(2)指標不用在定義是初始化,並且可以改變指向的物件。
指標操作:
(1)空指標:
int *p1=0;
int *p2=nullptr;
int *p3=null;
其中nullptr是c++11中新定義的。
(2)指標的比較,兩個指向同意位址或者都為0的指標在比較時為相同,否則不同。
(3)空指標,可以把任何型別的指標賦給空指標,但是不能進行操作,
int a=1;
int *p=&a;
void *pv=p;
因為指標的型別決定了指標從起始記憶體位置向後控制的記憶體數量,並且也決定了記憶體中的內容可以進行的運算和操作,空指標無法提供這一資訊,因此不能進行操作。空指標通常用來操作記憶體而不是記憶體中的值。
(4)對指標的引用:
int a=1;
int *p=&a;
int *&r=p;
對於r的資料型別可以這樣確定,從右向左看,首先是&,說明它是乙個引用,其次是*,說明引用的是乙個指標。
今天就到這裡,明天繼續學習。
C 變數和基本型別(一)
1基本內建型別 c 定義了一套包括算術型別和空型別在內的基本資料型別。算術型別包括字元,整型數,布林值和浮點數。空型別不對應任何具體地值,僅用於特殊的場合,例如函式不返回任何值時使用空型別作為返回型別。算術型別分為兩大類 整型 包括字元和布林型別在內 和浮點型。帶符號型別和無符號型別 除去布林型別和...
C 基本型別和變數
算術型別包含整型 包括字元和布林型別 和浮點型。主要型別 bool char wchar t char16 t char32 t short intlong long long float double long double 在程式中,帶符號型別和不帶符號型別最好不要混用,容易出現錯誤。如下圖 2...
C 變數和基本型別
變數的宣告與定義 聲加粗樣式明用於向程式表明變數的型別和名字,用extern表示,它不分配記憶體,定義則用於分配儲存空間,當然,定義也是宣告。const const修飾變數後,其值不可被修改,任何修改的嘗試都會導致編譯錯誤。引用 即物件的另乙個名字,在實際程式中主要用作函式的形參。1 引用是它繫結的...