亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、枚舉類型的使用方法

  • enum 是 C 語(yǔ)言中的一種自定義類型
  • enum 值是可以根據(jù)需要自定義的整型值
  • 第一個(gè)定義的 enum 值默認(rèn)為 0
  • 默認(rèn)情況下的 enum 值是在前一個(gè)定義值的基礎(chǔ)上加 1
  • enum 類型的變量只能取定義時(shí)的離散值
  • enum 中定義的值是C語(yǔ)言中真正意義上的常量
  • 在工程中 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語(yǔ)言中真正意義上的常量。

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

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

sizeof 可以采用以下的用法:

sizeof 是 C 語(yǔ)言的內(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 呢?這是因?yàn)樵诰幾g過程中所有的 sizeof 將被具體的數(shù)值所替換,var++ 這條語(yǔ)句根本得不到執(zhí)行。同樣,f() 函數(shù)也不會(huì)得到執(zhí)行,所以不會(huì)輸出 Autumn Ze,只會(huì)輸出返回值類型 int 的字節(jié)數(shù)。

三、typedef 的意義

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

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

typedef 重命名的類型:

  • 可以在 typedef 語(yǔ)句之后定義
  • 不能被 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 語(yǔ)句之后定義,不能被 unsigned 和 signed 修飾。

四、小結(jié)

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

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

相關(guān)文章

  • C++實(shí)現(xiàn)商店倉(cāng)庫(kù)管理系統(tǒng)

    C++實(shí)現(xiàn)商店倉(cāng)庫(kù)管理系統(tǒng)

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

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

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

    Opencv二幀差法檢測(cè)運(yùn)動(dòng)目標(biāo)與提取輪廓

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

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

    類型轉(zhuǎn)換是項(xiàng)目中常使用的一種語(yǔ)法規(guī)則,幾乎每個(gè)編程語(yǔ)言都不可避免的涉及到這方面,下面這篇文章主要給大家介紹了關(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)體的保存和讀取),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語(yǔ)言實(shí)現(xiàn)像素鳥游戲

    C語(yǔ)言實(shí)現(xiàn)像素鳥游戲

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

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

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

    C++ primer超詳細(xì)講解泛型算法

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

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

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

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

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

最新評(píng)論