對C語言資料型別和變數的理解

2021-06-28 06:01:19 字數 1188 閱讀 2825

很多c語言的教程都把資料型別定義為「資料和在資料上能進行的操作(運算)的集合」,意思是說對於乙個資料型別(如int a),當用該型別定義了乙個變數以後,資料所能表示的大小、所佔的儲存空間和能進行的運算操作都是固定的。而變數則是這種資料型別的例項,是這種資料型別特性表現的載體。

個人認為上面這些定義其實是站在人的角度給出的。可是程式語言到可執行的機器碼之間的轉化是由編譯器來完成的,也就是說學習程式語言不能只是站在人的角度看問題,站在編譯器的角度,明白編譯器在處理程式語言的過程做了哪些事兒是很關鍵的(可惜我目前還沒接觸編譯原理這門課)。如果是站在編譯器的角度看待資料型別是怎樣的呢?下面的論述可能不太正確,但是在還沒學過編譯原理的情況下,暫時這樣理解吧。

我們知道儲存空間的位址是線性的,比如32位位址匯流排的機器,它的位址範圍就是0x00000000~0xffffffff,如此大的一片區域,雖然每個位元組都有自己的專屬位址,但是記住位址可真不是個好辦法。現在要存放乙個100.45的資料,該怎麼做?首先可能要做的第一件事就是確定這個資料到底應該占用多大的儲存空間,也就是劃定一塊足夠大的空間存放這個資料;其次應該用哪塊空間儲存它?如果僅僅是存放這個資料,做這兩件事還比較簡單,但是如果資料非常多,大小還不一樣,那該怎麼辦?難道要乙個乙個的劃空間然後找位址?如果沒有資料型別這種概念,我想這是最好的方法了。

其實資料型別是可以這樣理解的:任何一種資料型別都是乙個「劃定儲存空間大小的模子」也就是說一旦拿到了一種資料型別,實際上就是拿到了乙個「模子」,這個模子可以劃定一塊大小確定的儲存空間,並且這個模子劃出來的空間儲存的資料所能進行的操作是固定不變的。

上面給出了資料型別的一種理解,那麼用這種資料型別定義的變數的本質是什麼呢?理解了上面資料型別的概念,相信很容易就能猜到,變數的本質其實就是:「給劃定好的空間取乙個簡單易記的名字」也就是說變數其實就是乙個儲存空間位址的別名(但是要區分變數作為右值時代表了空間裡的資料)以後要操作這個劃定好的儲存空間就可以用這個名字(比如要寫入或讀出資料,就可以用這個名字)。c語言中豐富的資料型別和變數其實就提供了各種「尺寸」的模子,程式設計師要做的就是選擇合適的模子,劃定大小適合的儲存空間並且把這個空間用乙個簡單易記的名字重新命名。

上面是個人對於資料型別和變數的理解,可能尚且不夠嚴謹和準確,但是也能在一定程度上反映了資料型別和變數的本質。

由於本人水平有限,如果哪位大俠覺得不對,歡迎指正批評!

第一次寫部落格,有點小激動啊!

C語言 資料型別和變數

第乙個c語言程式 include 1.include 包含標頭檔案 標準輸入輸出標頭檔案 3.可以用 活著 包圍標頭檔案。搜尋路徑不同,如果標頭檔案被 包圍,編譯器會在系統檔案中搜尋此標頭檔案 如果被 包圍,現在當前目錄中搜尋標頭檔案,如果未找到,則會在系統中查詢。一般情況下,如果是系統檔案,則用 ...

C語言資料型別 常量和變數

型別名 大小char 字元資料型別 1short 短整型2 int整形 4long 長整型4 float 單精度浮點數 4long long 更長的整形 8double 雙精度浮點數 8 1 字面常量 比如 1,2,a n 2 const定義的常量 const int a 10 在c語言中,當con...

C語言 資料型別 變數 常量

資料型別 c語言中,資料型別是指用來宣告不同型別的變數或函式的系統。變數的型別決定了變數儲存占用的空間。c中的資料型別 1.基本型別 算術型 整數型別和浮點型別。2.列舉型別 算術型 被用來定義在程式中只能賦予其一定的離散整數值得變數。3.void型別 型別說明符 void 表明沒有可用的值。4.派...