C 語言快速導覽 - 基本資料型態

在 C 語言中定義變數前,需要先經過宣告為某種資料型態,好讓編譯器分配記憶體空間出來, C 語言的基本資料型態可以分成三大類



字元



C 語言的字元型態佔用 1 個 byte ,也就是 8 個位元,以下程式會計算出字元型態所佔的位元組數
#include <stdio.h>

int main(void)
{
    printf("%s%4d\n", "char", sizeof(char));
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:sizeofchar.c
    功能:列印出字元型態所佔的記憶體空間
    作者:張凱慶
    時間:西元2010年4月 */


結果如下



宣告字元型態的變數使用關鍵字 char ,如
char a;


可以稍後利用指派給初值,凡是用單引號圍起來的單一字元都屬於字元型態的常數,因此
a = 'd';


這樣就把字元 'd' 指派到變數 a 裡了,也可以宣告同時給予初值
char a = 'd';


宣告變數的目的是先保留符合型態大小的記憶體空間,指派數值給該變數後,會將該數值的位元編碼形式儲存到所保留的記憶體空間之中。若是宣告變數後沒有給予初值,有可能該變數會保留記憶中空間原先的殘值,或是編譯器會自動歸零,視所用編譯器而定。


由於 C 語言直接支援 ASCII 編碼,因此凡是 ASCII 編碼的符號皆可以直接用字元型態來處理,同時,字元型態也可以用整數來表示,就是說字元型態的變數可以對應到 ASCII 編碼所表示的十進位數字,例如
char a = 100;


這樣變數 a 的值會等於 ASCII 編碼中編為十進位 100 的值,也就是字元 'd' 。


宣告字元型態的變數可用 signed 或 unsigned 修飾詞修飾,可將該字元型態變數的值限制成帶有正負號,或無正負號,不過使用上視機器需要而定。


有些不可見字元及單引號本身可用跳脫序列來表示,以下為跳脫序列的完整列表
跳脫序列的字元功能
\a響鈴
\b倒退鍵
\f跳頁
\n印出新列
\r歸位符號
\ttab 鍵
\v垂直定位符號
\\印出反斜線
\?印出問號
\'印出單引號
\"印出雙引號




整數類



C 語言的整數型態可概略分成 short 、 int 、 long 、 long long 幾類,其中 short、 int 、 long 等都為關鍵字。


short 被稱為短整數,佔用 2 個 byte 的記憶體空間,也就是 16 位元,可儲存 -32768 到 32767 之間的整數值。 long 被稱為長整數,則至少佔有 4 個 byte 的記憶體空間,也就是 32 位元,可儲存 -2147483648 到2147483647 之間的整數。


int 通常就稱為整數,而且所表示的範圍大小就跟機器硬體的整數大小相同,同時規定 short 的範圍不可大於 int ,也不可大於 long ,所以若是 32 位元的機器, int 與 long 的範圍大小會相同。 long long 是 C99 提出的標準,佔有 8 個 byte 的記憶體空間,也就是 64 位元,實際上運用視所用機器及編譯器可否支援。


以下程式會計算出四種整數型態所佔的位元組數
#include <stdio.h>

int main(void)
{
    printf("%9s%4d\n", "short", sizeof(short));
    printf("%9s%4d\n", "int", sizeof(int));
    printf("%9s%4d\n", "long", sizeof(long));
    printf("%s%4d\n", "long long", sizeof(long long));

    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:sizeofint.c
    功能:列印出整數型態所佔的記憶體空間
    作者:張凱慶
    時間:西元2010年4月 */ 


結果如下



宣告使用整數型態的變數,以 int 為例
int a;


可以稍後利用指派給初值,也就是整數常數
a = 1;


這樣變數 a 具有整數 1 的值,也可以宣告同時給予初值
int a = 1;


若是宣告整數變數後沒有給予初值,有可能該變數會保留記憶中空間原先的殘值,或是編譯器會自動歸零,或發生編譯時的錯誤,視所用編譯器而定。


宣告整數型態的變數可用 signed 或 unsigned 修飾詞修飾,可將該整數型態變數強制限定帶有正負號,或無正負號,使用上視需要而定。




浮點數類



C 語言的浮點數型態可概略分成 float 、 double 、 long double 幾類,其中 float 、 double 、 long 等都為關鍵字。


float 被稱為單精確度浮點實數,佔 4 個 byte 的記憶體空間, double 被稱為倍精確度浮點實數,佔 8 個 byte 的記憶體空間, long double 則被稱為延伸的倍精確度浮點實數,佔 16 個 byte 的記憶體空間。


由於浮點實數在電腦裡都是用模擬計算出逼近值,所以三種浮點數型態計算出的有效位數,佔用記憶體空間越多的有效位數會越長,一般來說, float 型態在小數點後六位就會出現誤差。


以下程式計算出三種浮點數型態所佔的位元組數
#include <stdio.h>

int main(void)
{
    printf("%11s%4d\n", "float", sizeof(float));
    printf("%11s%4d\n", "double", sizeof(double));
    printf("%s%4d\n", "long double", sizeof(long double));
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:sizefloat.c
    功能:列印出浮點數型態所佔的記憶體空間
    作者:張凱慶
    時間:西元2010年4月 */


結果如下



宣告使用浮點數型態的變數,以 double 為例
double a;


可以稍後利用指派給初值,也就是帶小數點的浮點數常數
a = 1.0;


這樣變數 a 具有浮點數 1.0 的值,也可以宣告同時給予初值
double a = 1.0;


若是宣告整數變數後沒有給予初值,有可能該變數會保留記憶中空間原先的殘值,或是編譯器會自動歸零,或發生編譯時的錯誤,視所用編譯器而定




沒有留言: