天天看點

非正常入門C語言:3、基本資料類型與基本構造資料類型

作者:嬴寒

在上一章中,我們基于計算機基本特性,延伸出數值、字元和布爾三種原始資料類型。因為這三種類型可以使用有限的二進制、不需大幅度改變結構就可以進行運算。

但在日常生活中,我們周邊充斥着的并非隻有簡單的資料,他們各自的類型在不同的場合具有不同的意義,有時還可能會共屬于某一個物體。

非正常入門C語言:3、基本資料類型與基本構造資料類型

一、基本資料類型

現實世界中,有數不盡的資訊,這些資訊面臨着巨大的考驗,那就是數字化。有的很容易就可以輸入到計算機中:如數字、數量等;有的卻非常困難:如漢字、顔色等。

面對輸入困難的東西,不同的思維選擇了不同的方案:如上世紀蠻夷洋奴主和蠻夷洋奴認為必須廢除漢字,改用拼音......;而如王選教授選擇“直面慘淡的人生”,創造出“王碼五筆輸入法”,開創中文語系快捷輸入之先河。

非正常入門C語言:3、基本資料類型與基本構造資料類型

基本資料類型就是通過初始資料類型的簡單變形實作的。如寬度、正負等。

下表為通用64位計算機中的有符号資料類型(中括号意為可省略)

非正常入門C語言:3、基本資料類型與基本構造資料類型

下表通用64位計算機中的為無符号資料類型(中括号意為可省略)

非正常入門C語言:3、基本資料類型與基本構造資料類型
非正常入門C語言:3、基本資料類型與基本構造資料類型

二、基本構造資料類型

世界是複雜的,并不是簡單的乘除加減......這也就意味着,很多資料并不是一個簡單的個體,也有可能是多個相同或不同的資料複合構成的。

例如:成績可能由不同學科的成績構成,同時還會有平均分等。

若我們需要表示某個人的成績,那麼還可以在成績中加入學号。那麼為了降低目前的講解難度,學号我們暫時以數字代替,分數也暫時隻用整數。

那麼,成績這樣的一個複雜資料就可以使用下表來表示:

非正常入門C語言:3、基本資料類型與基本構造資料類型

很顯然,無論這兩個值怎麼排列,隻要由這兩個簡單資料構成的代表的都是成績。也就是說多個基本資料按照一定的結構組合在一起就能表示相對複雜的資料,那就給複雜資料定一個較為統一的名字:結構體,structure,在程式設計中我們使用struct就可以。

例如上面的“成績”,就可以使用以下代碼進行描述:

非正常入門C語言:3、基本資料類型與基本構造資料類型

如果我們不希望結構體中的資料被修改,那就讓結構體變形一下,稱之為“枚舉體”,枚舉就是一一列舉的意思,程式設計中我們使用enum表示。既然稱為“枚舉”,那麼枚舉體中的資料應該自動有值的,同時如果我們修改,那麼後面的值也應該發行有序的變動。

例如:使用枚舉體代表班級中的每一個學生(學号序号),

非正常入門C語言:3、基本資料類型與基本構造資料類型
非正常入門C語言:3、基本資料類型與基本構造資料類型

此時,學習過C語言的小夥伴,可能會說,“下面是不是要說聯合體(union)了,這個我熟。。。”

非正常入門C語言:3、基本資料類型與基本構造資料類型

其實,聯合體也是變形後的結構體。結構體内部是不同資料代表不同的含義,各自占用自己的空間。而聯合體是整體上隻有一種資料,但内部卻能包含多種形式、擁有多種含義。

聯合體的寬度是看最大的資料類型而定的,如果内部最大是int,那麼整體就是int的寬度;如果最大是long,就是long的寬度。

例如:

非正常入門C語言:3、基本資料類型與基本構造資料類型

對type而言,給type中的ch一個值,就意味着type整體視為字元型;給type中的num一個值,就意味着type整體視為整型。但是在同一時刻,原則上,你隻能通路type中的ch或num,不能既通路ch,又通路num。而type的整體寬度卻是按照int來的,因為int的寬度比char的寬度大嘛。

繼續閱讀