萌新不看會後悔的C 基本型別總結(二)

2021-10-04 17:16:57 字數 4048 閱讀 8803

區別在於#define 不必定義該常量屬於什麼型別,是int,還是long int,而const定義的常量必須指明型別,至於哪種定義常量的方法好?我們推薦使用第二種,至於為什麼,後面會說,我們現在主要來討論c++如何確定常量的型別,假設我們就使用#define定義了 max = 123456789怎麼乙個常量,那麼c++會如何確定常量型別呢?

#define max 12456789

std::cout <<

sizeof

(max)

<< std::endl;

來看執行結果:

結果是4,說明c++將max儲存為int型別。

如果我們把這個數變一下:

#define max 36456465ll

std::cout <<

sizeof

(max)

<< std::endl;

執行結果:

我們將max 後面加了兩個ll,還記得ll表示什麼嗎?對,表示的是long long型別。

下面的結論是需要記住的:在c++中將使用這幾種型別中能夠儲存該數的最小型別來表示,前提是該數後面沒有字尾,如果有字尾,則按字尾指定的型別來儲存,至於浮點數呢,c++規定過只要不加f字尾的浮點數預設都為double,所以想要將浮點數儲存為float,就需要特別的加上字尾f,這是和整形的不同。

以上說的都是對於十進位制的儲存方式,而對於八進位制或者是十六進製制,它們的儲存方式為int,unsigned int,long,unsigned long,long long或者是unsigned long long。至於為什麼會使用無符號的型別來儲存,這是因為十六進製制常用來表示記憶體位址,記憶體位址是沒有符號的,因此unsigned int 比 long更適合來表示十六位的位址。

下面來說說const,const除了上面的用法,也就是定義常量,用const修飾變數時,一定要在初始化的時候進行賦值,否則之後是無法賦值的。

還有一些其他的用法,當然,如果你剛接觸到上面的內容,這個可以跳過。

常量指標:

int number =

666;

const

int* p =

&a;// int const * p 這種方法和上面等效,這個指標被修飾為常量指標,就是不可以通過這個指標修改變數的值。

number =66;

//但是可以通過number修改,也就是間接修改了指標指向的變數。

// 並且需要注意的一點是雖然不可以通過這個指標修改變數的值,但是可以修改指標所指向的變數,也就是說下面是合法的。

int number_2 =1;

p =&number_2;

就好比我有一台電腦,裝的是xp系統,有一天鄰居小姐姐想跟我借電腦用一下,但是她覺得xp系統老掉牙了,想重灌為win10系統,這時我就告訴她,不可以,重灌只有我可以,這是我的電腦,她雖然不能給我的電腦重灌系統,但是它可以選擇跟其他人借用有win10系統的電腦。這就是常量指標,對應的還有一種指標常量,往下看。

指標常量:

int number =

666;

int*

const p =

&number;

// 千萬不要寫出 const * int p,這是錯誤的寫法。

// 指標常量指向的位址不能改變,但是位址中儲存的數值是可以改變的。

*p =

6; // 可以

int number2 =

6;p =

&number2; // 不可以

除了以上兩種,還有一種結合了上面兩種,叫做指向常量的長指標。

int number =

666;

const

int*

const p =

&number;

// p既不能改變指向位址,也不能改變值,這個屬於它們三個中的大哥。

還有就是如果給函式的返回值修飾了const,則接收返回值的變數型別也必須同樣被const修飾。

長話短說,如果要表示中文,顯然乙個位元組是不夠的,至少需要兩個位元組,而且還不能和ascii編碼衝突,所以,中國制定了gb2312編碼,用來把中文編進去,類似的,日文和韓文等其他語言也有這個問題。為了統一所有文字的編碼,unicode應運而生。unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。。unicode通常用兩個位元組表示乙個字元,原有的英文編碼從單位元組變成雙位元組,只需要把高位元組全部填為0就可以。想要深入了解請單擊

通用字元名類似於轉義字元,使用\u和\u打頭,\u然後跟乙個八進位制,\u後面跟的是十六進製制,可以這樣用:

int k\u0025d;

// 這樣定義變數名

cout <<

"\u0025"

;// 列印該字元

這樣就可以在控制台列印出我們想要字元,比如各種圖案。但是前提是要支援通用字元名,如果不支援,就會提示

一般黑框框是顯示不了特殊字元的,給大家找到乙個中文轉unicode的**:中文字元與unicode字元相互轉換

當使用\u6211列印出來的便是我:

char的有無符號和int不太一樣,它比較獨特,char在預設情況下不像int那樣,預設既不是unsigned char也不是signed char,是否有符號由c++決定,在我的編譯器上可能是有符號型別的,你的終端可能是無符號型別,如果你不確定char,則應該盡可能的顯式去宣告是nusigned 還是signed,如果你只是儲存ascii字元,則無關char是什麼型別,它都可以儲存。

ansi/iso c++標準新增了一種名叫bool的新型別,它只佔乙個位元組,只儲存true和false這個已經巨集定義好的字面值,只有假和真兩種表現方式,有些人一聽到真假就想到01,一想到01就認為該型別的變數只能儲存0或1,其實這種理解是不對的,該變數只儲存true和false這兩個值,並不是儲存0和1,除了0被替換為false之外,所有的數字,1,5,8等等都會被替換為true,包括負數,同樣反過來,將bool型別的變數賦值給int型別的變數,只會出現0和1這兩個值。

bool b1 =

true

// 正確

bool b2 =

4; //正確,但4會被替換為1

int a = b2; // a的值為1,而不是4,也不是true

簡單來說先考慮優先順序,再考慮結合性。

當兩個運算子的優先順序是一樣的話,要使用結合性進行判斷:

例如:

int a =10*

5/6;//由於/ 和*的優先順序是一樣的,這時候就應該用結合性判斷是從左往右算,還是從右往左算。

C 的基本型別

在數學中,整數和分數統稱為有理數,無限不迴圈小數和開根開不盡的數統稱為無理數,而有理數和無理數統稱為實數。在計算機中,處理的物件是資料。為了描述不同的物件而需要不同的資料,因此,c 語言提供了豐富的資料型別。c 的資料型別主要包括基本資料型別和構造資料型別。其中基資料本型別包括整型 浮點型 字元型 ...

C 及變數基本型別知識總結

c 標準規定了每個算算術型別的最小儲存空間,但是並不阻止編譯器使用更大的儲存空間。整形中的問題 c 標準並未規定signed型別如何用位來表示,而是由編譯器自由決定如何表示signed型別。當我們把乙個超出型別表示範圍的值賦值給指定型別的物件時 最終的取值取決於這種型別是signed還是unsign...

(四十二)C 的基本型別(總結)

基本型別有兩組,整型和浮點型別。整型從小到大排列 bool char signed char unsigned char short unsigned short int unsigned int long unsigned long,以及c 11新增的long long和unsigned long...