欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言詳細分析講解關(guān)鍵字enum與sizeof及typedef的用法

 更新時間:2022年04月20日 17:05:41   作者:清風自在?流水潺潺  
在?C?語言中經(jīng)常會見到?enum、sizeof、typedef,那么我們今天就來講解下它們?nèi)齻€,enum是C語言中的一種自定義類型,它是一種枚舉類型,sizeof是編譯器的內(nèi)置指示符,用于計算類型或變量所占內(nèi)存打小,typedef用于給一個已經(jīng)存在的數(shù)據(jù)類型重命名,本質(zhì)上不能產(chǎn)生新的類型

一、枚舉類型的使用方法

  • enum 是 C 語言中的一種自定義類型
  • enum 值是可以根據(jù)需要自定義的整型值
  • 第一個定義的 enum 值默認為 0
  • 默認情況下的 enum 值是在前一個定義值的基礎(chǔ)上加 1
  • enum 類型的變量只能取定義時的離散值
  • enum 中定義的值是C語言中真正意義上的常量
  • 在工程中 enum 多用于定義整型常量

下面看一段 enum 的使用代碼吧:

#include<stdio.h>
 
enum
{
    ARRAY_SIZE = 10
};
 
enum Color
{
    RED = 0x00FF0000,
    GREEN = 0x0000FF00,
    BLUE = 0x000000FF
};
 
void PrintColor(enum Color c)
{
    switch (c)
    {
        case RED:
            printf("Color: RED (0x%08x)\n", c);
            break;
        case GREEN:
            printf("color: GREEN (0x%08X)\n", c);
            break;
        case BLUE:
            printf("Color: BLUE (0x%08X)\n", c);
            break;
    }
}
 
void InitArray(int array[])
{
    int i = 0;
    
    for (i = 0; i < ARRAY_SIZE; i++)
    {
        array[i] = i + 1;
    }
}
 
void PrintArray(int array[])
{
    int i = 0;
    
    for (i = 0; i < ARRAY_SIZE; i++)
    {
        printf("%d\n", array[i]);
    }
}
 
int main()
{
    enum Color c = GREEN;
    
    int array[ARRAY_SIZE] = {0};
    
    PrintColor(c);
    
    InitArray(array);
    
    PrintArray(array);
    
    return 0;
}

下面為輸出結(jié)果:

這段程序說明enum 中定義的值是C語言中真正意義上的常量。

二、sizeof 關(guān)鍵字的用法

  • sizeof 是編譯器的內(nèi)置指示符
  • sizeof 用于計算類型或變量所占的內(nèi)存大小
  • sizeof 的值在編譯期就已經(jīng)確定

sizeof 可以采用以下的用法:

sizeof 是 C 語言的內(nèi)置關(guān)鍵字而不是函數(shù)

  • 在編譯過程中所有的 sizeof 將被具體的數(shù)值所替換
  • 程序的執(zhí)行過程與 sizeof 沒有任何關(guān)系

下面看一段 sizeof 的本質(zhì)的代碼:

#include<stdio.h>
 
int f()
{
    printf("Autumn Ze");
    
    return 0;
}
 
int main()
{
    int var = 0;
    
    int size = sizeof(var++);
    
    printf("var = %d, size = %d\n", var, size);
    
    size = sizeof(f());
    
    printf("size = %d\n", size);
    
    return 0;
}

下面為輸出結(jié)果:

為什么 var 不等于 1 呢?這是因為在編譯過程中所有的 sizeof 將被具體的數(shù)值所替換,var++ 這條語句根本得不到執(zhí)行。同樣,f() 函數(shù)也不會得到執(zhí)行,所以不會輸出 Autumn Ze,只會輸出返回值類型 int 的字節(jié)數(shù)。

三、typedef 的意義

typedef 用于給一個已經(jīng)存在的數(shù)據(jù)類型重命名

typedef 本質(zhì)上不能產(chǎn)生新的類型

typedef 重命名的類型:

  • 可以在 typedef 語句之后定義
  • 不能被 unsigned 和 signed 修飾

用法:typedef type new_name;

下面看一段 typedef 使用的代碼:

#include<stdio.h>
 
typedef int Int32;
 
struct _tag_point
{
    int x;
    int y;
};
 
typedef struct _tag_point Point;
 
typedef struct
{
    int length;
    int array[];
}SoftArray;
 
typedef struct _tag_list_node ListNode;
struct _tag_list_node
{
    ListNode* next;
};
 
int main()
{
    Int32 i = -100;
    //unsigned Int32 ii = 0;
    Point p;
    SoftArray* sa = NULL;
    ListNode* node = NULL;
    
    return 0;
}

這段代碼主要就是說明typedef 重命名的類型可以在 typedef 語句之后定義,不能被 unsigned 和 signed 修飾。

四、小結(jié)

  • enum 用于定義離散值類型
  • enum 定義的值是真正意義上的常量
  • sizeof 是編譯器的內(nèi)置指示符
  • sizeof 不參與程序的執(zhí)行過程
  • typedef 用于給類型重命名
  • 重名的類型可以在 typedef 語句之后定義

到此這篇關(guān)于C語言詳細分析講解關(guān)鍵字enum與sizeof及typedef的用法的文章就介紹到這了,更多相關(guān)C語言 enum sizeof typedef內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實現(xiàn)商店倉庫管理系統(tǒng)

    C++實現(xiàn)商店倉庫管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)商店倉庫管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 解析C++中派生的概念以及派生類成員的訪問屬性

    解析C++中派生的概念以及派生類成員的訪問屬性

    這篇文章主要介紹了解析C++中派生的概念以及派生類成員的訪問屬性,是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Opencv二幀差法檢測運動目標與提取輪廓

    Opencv二幀差法檢測運動目標與提取輪廓

    這篇文章主要為大家詳細介紹了Opencv使用二幀差法檢測運動目標與提取輪廓,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++11新特性之四種類型轉(zhuǎn)換cast說明

    C++11新特性之四種類型轉(zhuǎn)換cast說明

    類型轉(zhuǎn)換是項目中常使用的一種語法規(guī)則,幾乎每個編程語言都不可避免的涉及到這方面,下面這篇文章主要給大家介紹了關(guān)于C++11新特性之四種類型轉(zhuǎn)換cast說明的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • C++數(shù)據(jù)序列化方式(自定義結(jié)構(gòu)體的保存和讀取)

    C++數(shù)據(jù)序列化方式(自定義結(jié)構(gòu)體的保存和讀取)

    這篇文章主要介紹了C++數(shù)據(jù)序列化方式(自定義結(jié)構(gòu)體的保存和讀取),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言實現(xiàn)像素鳥游戲

    C語言實現(xiàn)像素鳥游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)像素鳥游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++調(diào)用C#的DLL實現(xiàn)方法

    C++調(diào)用C#的DLL實現(xiàn)方法

    這篇文章主要介紹了C++調(diào)用C#的DLL實現(xiàn)方法,很有實用價值,需要的朋友可以參考下
    2014-07-07
  • C++ primer超詳細講解泛型算法

    C++ primer超詳細講解泛型算法

    泛型編程,故如其名,是一個泛化的編程方式。其實現(xiàn)原理為程序員編寫一個函數(shù)/類的代碼示例,讓編譯器去填補出不同的函數(shù)實現(xiàn)
    2022-07-07
  • C++中vector迭代器失效與深淺拷貝問題詳析

    C++中vector迭代器失效與深淺拷貝問題詳析

    迭代器失效就是迭代器底層對應(yīng)指針所指向的空間倍銷毀了,導致使用了一塊已經(jīng)被釋放了的空間,下面這篇文章主要給大家介紹了C++中vector迭代器失效與深淺拷貝問題的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • c++中引用和指針的區(qū)別和聯(lián)系

    c++中引用和指針的區(qū)別和聯(lián)系

    許多人對于引用和指針的區(qū)別與聯(lián)系很糾結(jié)(包括我在內(nèi)O(∩_∩)O哈哈~),最近看到一篇關(guān)于引用和指針區(qū)別和聯(lián)系的文章,感覺茅塞頓開,在這里和大家分享下
    2014-04-04

最新評論