1. 程式人生 > >C 語言資料型別意義解析

C 語言資料型別意義解析

先給出一張書上關於資料型別的分類圖,其中對於指標型別和空型別做了不同的分類,具體原因請看下面的說明

關於C中的資料型別,個人的劃分方法是 分為兩類,一類是基本型別(地址型別也是基本型別的一種),也就是語言本身所提供的,編譯器可以直接識別的。另一類就是組合型別(基本型別組合在一起)。

C語言給定資料型別的原因:

在用一個數據型別定義變數時,實際上也就是給定了三個資訊,資料在記憶體中所佔的位元組數,資料在記憶體中的首地址,資料在記憶體中儲存時的編碼方式。對比弱型別語言,他們的編譯器在儲存這些資料的同時,必然會自動儲存上面所說的三個資訊。使用強資料型別的好處就是,一方面可以用編譯器來檢查資料,增加一定的安全性。也為編譯器對之後的資料處理提供了很多的方便。

型別的詳細說明:

1、整型 intshortlong  最初是為了節約記憶體空間而設計的,目前來看大部分情況下已經完全不必要了,定義變數時,最好是定義與機器字長一致的型別,不滿足條件時,才考慮範圍更大的型別。ps:補碼儲存

2、字元型:char儲存字元,不過其本質上是用ASCII 儲存的整型。

3、浮點型:floatdouble對應實數型別,由於採用IEEE754 標準儲存(組成原理筆記中有詳細說明),所以在使用時應當注意精確度的問題,也就是說用==比較兩個實數時完全沒有意義的。

4、指標型別:也就是地址型別,32位系統中,指標型別資料固定佔4個位元組,它指向的是一個地址空間。其他的所有意義(比如所指向空間可以儲存的資料的型別)都是編譯器賦予它的,具體的編譯器語法,在指標一節詳細說明。

5、空型別:void,兩個問題,一是空型別是什麼?二是為什麼要有空型別?

首先,空型別如果嚴格按照型別的定義來說,它並不是一種型別,而是編譯器可以自動識別的一種特殊情況,比如,返回值型別位空,就表示沒有返回值。那麼編譯器對函式的處理就達到了一種統一。空型別存在的原因是在一方面代表了“無”的狀態,另一方面,作為空型別指標,它代表了“所有”的狀態,即所有型別的指標都可以直接賦值給空型別指標。int *p1 = null; void * p = p1; // OK

6、陣列型別:相同型別的多個數據的集合。對應的是同類型資料的批量處理問題。

7、結構型別:有關聯的多個數據的集合。實際上它就是面向物件的雛形,也是資料庫,資料結構的基礎。

8、聯合型別:主要還是記憶體空間不足的情況下的產物,多個變數用同一段儲存空間儲存。目前基本不會再使用。

9、列舉型別:本質上是一個int(或short)型變數,但是限制其取值範圍。同樣由編譯器識別處理。