非常規(guī)入門C語言:3、基本數(shù)據(jù)類型與基本構(gòu)造數(shù)據(jù)類型
在上一章中,我們基于計(jì)算機(jī)基本特性,延伸出數(shù)值、字符和布爾三種原始數(shù)據(jù)類型。因?yàn)檫@三種類型可以使用有限的二進(jìn)制、不需大幅度改變結(jié)構(gòu)就可以進(jìn)行運(yùn)算。
但在日常生活中,我們周邊充斥著的并非只有簡單的數(shù)據(jù),他們各自的類型在不同的場(chǎng)合具有不同的意義,有時(shí)還可能會(huì)共屬于某一個(gè)物體。
一、基本數(shù)據(jù)類型
現(xiàn)實(shí)世界中,有數(shù)不盡的信息,這些信息面臨著巨大的考驗(yàn),那就是數(shù)字化。有的很容易就可以輸入到計(jì)算機(jī)中:如數(shù)字、數(shù)量等;有的卻非常困難:如漢字、顏色等。
面對(duì)輸入困難的東西,不同的思維選擇了不同的方案:如上世紀(jì)蠻夷洋奴主和蠻夷洋奴認(rèn)為必須廢除漢字,改用拼音......;而如王選教授選擇“直面慘淡的人生”,創(chuàng)造出“王碼五筆輸入法”,開創(chuàng)中文語系快捷輸入之先河。
基本數(shù)據(jù)類型就是通過初始數(shù)據(jù)類型的簡單變形實(shí)現(xiàn)的。如寬度、正負(fù)等。
下表為通用64位計(jì)算機(jī)中的有符號(hào)數(shù)據(jù)類型(中括號(hào)意為可省略)
下表通用64位計(jì)算機(jī)中的為無符號(hào)數(shù)據(jù)類型(中括號(hào)意為可省略)
二、基本構(gòu)造數(shù)據(jù)類型
世界是復(fù)雜的,并不是簡單的乘除加減......這也就意味著,很多數(shù)據(jù)并不是一個(gè)簡單的個(gè)體,也有可能是多個(gè)相同或不同的數(shù)據(jù)復(fù)合構(gòu)成的。
例如:成績可能由不同學(xué)科的成績構(gòu)成,同時(shí)還會(huì)有平均分等。
若我們需要表示某個(gè)人的成績,那么還可以在成績中加入學(xué)號(hào)。那么為了降低當(dāng)前的講解難度,學(xué)號(hào)我們暫時(shí)以數(shù)字代替,分?jǐn)?shù)也暫時(shí)只用整數(shù)。
那么,成績這樣的一個(gè)復(fù)雜數(shù)據(jù)就可以使用下表來表示:
很顯然,無論這兩個(gè)值怎么排列,只要由這兩個(gè)簡單數(shù)據(jù)構(gòu)成的代表的都是成績。也就是說多個(gè)基本數(shù)據(jù)按照一定的結(jié)構(gòu)組合在一起就能表示相對(duì)復(fù)雜的數(shù)據(jù),那就給復(fù)雜數(shù)據(jù)定一個(gè)較為統(tǒng)一的名字:結(jié)構(gòu)體,structure,在編程中我們使用struct就可以。
例如上面的“成績”,就可以使用以下代碼進(jìn)行描述:
如果我們不希望結(jié)構(gòu)體中的數(shù)據(jù)被修改,那就讓結(jié)構(gòu)體變形一下,稱之為“枚舉體”,枚舉就是一一列舉的意思,編程中我們使用enum表示。既然稱為“枚舉”,那么枚舉體中的數(shù)據(jù)應(yīng)該自動(dòng)有值的,同時(shí)如果我們修改,那么后面的值也應(yīng)該發(fā)行有序的變動(dòng)。
例如:使用枚舉體代表班級(jí)中的每一個(gè)學(xué)生(學(xué)號(hào)序號(hào)),
此時(shí),學(xué)習(xí)過C語言的小伙伴,可能會(huì)說,“下面是不是要說聯(lián)合體(union)了,這個(gè)我熟。。?!?/p>
其實(shí),聯(lián)合體也是變形后的結(jié)構(gòu)體。結(jié)構(gòu)體內(nèi)部是不同數(shù)據(jù)代表不同的含義,各自占用自己的空間。而聯(lián)合體是整體上只有一種數(shù)據(jù),但內(nèi)部卻能包含多種形式、擁有多種含義。
聯(lián)合體的寬度是看最大的數(shù)據(jù)類型而定的,如果內(nèi)部最大是int,那么整體就是int的寬度;如果最大是long,就是long的寬度。
例如:
對(duì)type而言,給type中的ch一個(gè)值,就意味著type整體視為字符型;給type中的num一個(gè)值,就意味著type整體視為整型。但是在同一時(shí)刻,原則上,你只能訪問type中的ch或num,不能既訪問ch,又訪問num。而type的整體寬度卻是按照int來的,因?yàn)閕nt的寬度比char的寬度大嘛。