11_enum,sizeof,typedef分析

关键词:enum, sizeof, typedef

1. 枚举类型的使用方法

  • enum是C语言中的一种自定义类型
  • enum值是可以根据需要自定义的整形值
  • 第一个定义的enum默认为0
  • 默认情况下的enum值是在前一个定义值的基础上加1
  • enum类型的变量只能取定义时的离散值
#include <stdio.h>

enum Color
{
    GREEN,
    RED = 2,
    BLUE
};

int main()
{
    enum Color green = GREEN;
    enum Color red = RED;
    enum Color blue = BLUE;
    
    printf("green = %d\n", green);
    printf("red = %d\n", red);
    printf("blue = %d\n", blue);

    return 0;
}

输出结果:

green = 0
red = 2
blue = 3

2. 枚举类型的特殊意义

  • enum中第一的值是C语言中的真正意义上的常量
  • 在工程中enum多用于定义整形常量
#include <stdio.h>

// 用无名枚举类型定义整型常量
enum 
{
    ARRAY_SIZE = 10
};

int main()
{
    int array[ARRAY_SIZE] = {0};
    
    for(int i=0; i<ARRAY_SIZE; i++)
    {
        printf("%d\n", array[i]);
    }
    
    return 0;
}

3. enum的使用

#include <stdio.h>

enum 
{
    ARRAY_SIZE = 10
};

enum Color
{
    RED = 0x00FF0000,
    GREEN = 0x0000FF00,
    BLUE = 0x000000FF
};

void PrintColor(enum Color color)
{
    switch(color)
    {
        case RED:
            printf("Color: RED (0x%08x)\n", color);
            break;
        case GREEN:
            printf("Color: GREEN (0x%08x)\n", color);
            break;
        case BLUE:
            printf("Color: BLUE (0x%08x)\n", color);
            break;
        default:
            printf("Color: ERROR");
            break;
    }
}

void InitArray(int* arr)
{
    for(int i=0; i<ARRAY_SIZE; i++)
    {
        arr[i] = i + 1;
    }
}

void PrintArray(int* arr)
{
    for(int i=0; i<ARRAY_SIZE; i++)
    {
        printf("%d\n", arr[i]);
    }
}

int main()
{
    int array[ARRAY_SIZE] = {0};
    
    enum Color green = GREEN;
    
    InitArray(array);
    
    PrintArray(array);
    
    PrintColor(green);
    
    
    return 0;
}

输出结果:

1
2
3
4
5
6
7
8
9
10
Color: GREEN (0x0000ff00)

4. sizeof关键字的用法

  • sizeof是编译器的内置指示符
  • sizeof用于计算类型或变量所占的内存大小
  • sizeof的值在编译器就已经确定
  • sizeof的用法:
    用于类型sizeof(type)
    用于变量sizeof(var) or sizeof var
#include <stdio.h>

int main()
{
    int i = 0;
    
    printf("%d\n", sizeof(int));
    printf("%d\n", sizeof(i));
    printf("%d\n", sizeof i);
    
    return 0;
}

5. sizeof的本质

  • sizeof是C语言的内置关键字而不是函数
  • 编译过程中所有的sizeof将被具体的数值所替换
  • 程序的执行过程与sizeof没有任何关系
#include <stdio.h>

int main()
{
    int var = 0;
    int size = sizeof(++var);   // sizeof为C语言关键字,不是函数,在编译期间sizeof将被具体的值所提换,因此在编译期间 数值4将替换sizeof(++var),语句++var不会执行
    
    printf("var = %d, size = %d\n", var, size);
    
    return 0;
}

输出结果:

var = 0, size = 4

6. typedef的意义

  • typedef用于给一个已经存在的数据类型重命名
  • typedef本质上不能产生新的类型
  • typedef重命名的类型:
    可以在typedef语句之后定义
    不能被unsignedsigned修饰
  • typedef的用法:typedef type new_name;
#include <stdio.h>

typedef int INT32;

struct _tag_point
{
    int x;
    int y;
};

typedef struct _tag_point Point;

typedef struct
{
    int len;
    int array[];
} SoftArray;

typedef struct _tag_list_node ListNode;
struct _tag_list_node
{
    ListNode* next;
};

int main()
{
    INT32 i = 100;          // int
//  unsigned INT32 ui = 1;  // 由typedef重命名的变量不能被unsigned修饰
    
    Point p;                // struct _tag_point
    SoftArray* sa = NULL;   // struct
    ListNode* node = NULL;  // struct _tag_list_node
    
    return 0;
}

7. 小结

  • enum用于定义离散值类型
  • enum定义的值是真正意义上的常量
  • sizeof编译器的内置指示符
  • sizeof不参与程序的执行过程
  • typedef用于给类型重命名,重命名的类型可以在typedef语句之后定义

声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!

    原文作者:jacob2359
    原文地址: https://www.jianshu.com/p/47cc60f030bf#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞