回覆列表
  • 1 # 智慧硬體分析

    資料型別的關鍵字總共有12個,分別為:char、double、enum、float、int、long、short、signed、struct、union、unsigned、void。如下圖所示。

    由於執行C語言的硬體平臺千差萬別,因此不管是K&RC還是ANSI C都沒有對簡單資料型別所要佔用的位的長度進行嚴格的約定。ANSI C標準加入了新的規範,它對各種整形數的最小允許範圍作出了要求,具體要求如下表格所示。

    按照ANSI C的標準,char資料型別至少是8位長度,short資料型別最少是16位長度,long資料型別至少是32位長度,int型別最少是16位長度,也可以是32位長度。不同的編譯器對資料型別長度的約定有可能是不同的。

  • 2 # 染指流年99211

    整型(short, int,long),分別是2,4,8位元組,浮點型(float,double),分別是4,8位元組,字元型(char),單位元組

  • 3 # 河南最強科技君

    C 語言也允許定義各種其他型別的變數,比如列舉、指標、陣列、結構、共用體等等,這將會在後續的章節中進行講解,本章節我們先講解基本變數型別。

    C語言的變數以及型別:

    C語言中的變數分別為整數型、字元型、和浮點型, 整數型變數分別為短整數short、整型int 、長整數型long。浮點型變數分別為單精度浮點型float、雙精度浮點型double。

  • 4 # 科技電小二

    我們在微控制器開發當中,基本上用C語言程式設計,會常用到各種變數。

    其實對於我個人而言,unsigned char ,unsigned int,unsigned long,float,struct結構體,指標變數,這幾類變數在我的微控制器專案中比較常用,有時候會結合一維陣列/二維陣列使用。

    在絕大部分的微控制器開發過程中

    unsigned char 是一個位元組,範圍0~255,

    unsigned int 是2個位元組,範圍是0~65535

    unsigned long是四個位元組,範圍是0~(2的32次冪-1)

    但在少數的微控制器開發環境當中,就不太一樣。比如前四五年前,我有使用合泰的微控制器。

    unsigned char和unsigned int 都是是一個位元組,範圍0~255,

    unsigned long 是2個位元組,範圍是0~65535

    而結構體的位寬,則與變數成員的多少和型別有關係,有包含的所有變數的位寬相加得到結構體的位寬。

    同樣的,結構體指標,指標地址,則與微控制器的儲存位寬有關係,如果是32位微控制器,則是四個位元組。在C語言當中,變數還與等關鍵詞組合使用

    常常看到很多工程中,在定義變數的時候,會經常與typedef 與各類變數型別進行組合使用,這樣做的目的,主要是

    1為了簡化變數定義,

    2避免移植時平臺的差異而編譯不過的情況。

    與static關鍵詞組合使用時,此處static ,是靜態變數,我喜歡在函式當中使用,代表這個變數在這個函式當中執行,變數不丟失。

    與const關鍵詞組合使用時,則代表這是一個常量,是固定的資料,需要賦初值。

    各類變數位元組的寬度,與晶片的平臺有很大的關係, 不同的平臺,位寬會存在差異。

    在程式設計時,需要明確變數範圍,以便在定義變數的時候,選擇合適的變數型別。否則會造成溢位的情況,程式執行達不到程式邏輯正常的效果。

    C語言的運用靈活多變,一定要掌握基礎知識,熟練使用,才能寫出優美高效的程式碼。

  • 5 # 編碼之道

    C語言的基本變數型別如下:

    char、unsigned char

    short、unsigned short

    int、unsigned int

    long、unsigned long

    long、unsigned long long

    float

    double

    每種變數還有對應的指標型別:

    char*、unsigned char*

    short*、unsigned short*

    int*、unsigned int*

    long*、unsigned long*

    long long*、unsigned long long*

    float*

    double*

    此外還有struct(結構體)、union(聯合體)和enum(列舉)三種特殊型別,以及對應的指標型別。

    上面的每種型別都可以定義相應型別的變數,每個變數在計算機中的表示方式各不相同,所以佔用的儲存空間也會各不相同。即使同樣的變數,在不同的平臺佔用的儲存空間也各部相同,此外還要考慮編譯器的差別,不同的編譯器對一些基本變數的定義存在一些差異。

    要想知道儲存每種變數佔用的位元組數,需要用編譯器提供的sizeof函式來檢測,比如下面是我在VC2017上使用X86(32位)平臺的檢測程式與結果:

    使用同樣的程式碼,下面是在X64(64位)平臺編譯並執行的結果:

    透過對比不難發現,基本型別佔用的儲存空間是相同(使用別的編譯器,比如gcc可能會顯示不同的輸出)的,而指標型別佔用的位元組數則不相同,32位平臺是4位元組,64位平臺是8位元組,說明指標變數佔用的位元組數與平臺緊密相關。不過有一點需要注意,只要是指標型別變數,不管它實際指向什麼型別,在同一平臺上佔用的位元組數是相同的。

    最後,再說明一下幾個特殊型別:

    1、struct(結構體)變數佔用的儲存空間是各成員變數佔用的空間之和,當然還要考慮系統的位元組對齊機制,比如MyStruct在兩個平臺都是佔用16位元組,就是這種原因造成的;

    2、union(聯合體)變數佔用的儲存空間等成員變數中佔用空間最大的一個;

    3、enum(列舉型別)變數佔用的儲存空間與int型變數相同。

  • 6 # 瓶凡科技營

    首先,考慮不同硬體平臺的特性問題

    可以說C語言是一門跨平臺可編譯的程式語言,同一段程式碼,只要對應的硬體平臺有編譯器的支援,就可以編譯執行,所以我們在說C語言的變數型別和儲存空間時首先要考慮平臺的差異,比如我們8位的微控制器80C51,16位的Intel 8086處理器,我們的32位的ARM和PowerPc,或者DSP晶片,再比如我們常見的64位MIPS處理器,它們有不同的指令集,編譯器,還有支援的位數,同一個C語言的型別,在不同處理器上可能佔有的空間不一樣,所以我以下回答拿最常見的32位處理器為例說明。

    其次,關於C語言常用變數型別

    C語言中變數的型別基本分為:整型,浮點型,字元型,陣列,結構體,列舉和聯合體等,下面分類說明:

    1、整型變數

    一般整型變數 就是我們經常寫的int型,整型變數又分為短整型short int 。由於符號的加入,又分為有符號和無符號之分。所以總結如下:

    無符號整型 unsigned int

    有符號整型 (signed) int

    無符號半整型 unsigned short (int)

    有符號半整型 (signed) short (int)

    括號內部分可省略

    2、浮點型

    有單精度和雙精度之分:

    單精度 float

    雙精度 double

    3、字元型

    按有無符號:

    有符號 (signed) char

    無符號 unsigned char

    4、陣列

    按緯度分

    一維陣列 type Buffer[ ]

    二維陣列 type Buffer[ ][ ]

    多維陣列 type Buffer[ ][ ]……[ ]

    5、結構體

    struct name

    {

    type1 value1;

    type2 value2;

    ……

    typen valuen;

    }

    6、列舉

    enum name

    {

    name1,

    name2,

    ……

    namen

    }

    7、聯合體

    union name

    {

    value1 ,

    value2,

    ……

    valuen

    }

    然後,關於不同型別儲存位元組數

    32位處理器前提下

    整型:4位元組

    短整型:2位元組

    字元型:1位元組

    陣列: 型別位元組數*陣列元素個數

    結構體:結構體內所有元素空間和

    備註:考慮編譯器對於結構體的位元組對齊操作,可使用#pragma pack(n)預編譯指令,對齊結構體,然後計算

    列舉:4位元組

    聯合體:體內最大元素所佔空間

    最後,動態獲取變數大小

    如果不確定當前硬體平臺,指定變數的佔用空間情況,可使用sizeof關鍵字進行計算,比如sizeof(int),會計算出佔用位元組數,括號可省略。

  • 中秋節和大豐收的關聯?
  • 如果在《火影忍者》大結局最後一個鳴人的畫面,突然他的眼中出現別天神的痕跡,那會怎麼樣?