admin管理员组文章数量:1123010
enum, sizeof, typedef
枚举类型enum
- enum 是 C 语言中的一种自定义类型
- enum 值是可以根据需要自定义的整型值
- 第一个定义的 enum 值默认为 0
- 默认情况下的 enum 值在前一个定义值得基础上加 1
- enum 类型的变量只能取定义时得离散值
-
void code() {enum Color{GREEN, // 0RED = 2, // 2BLUE, // 3};enum Color c = GREEN;printf("%d\n", c); }
枚举类型的特殊意义
- enum 中定义的值是 C 语言中真正意义上的常量
- 在工程中 enum 多用于定义整形常量或离散的整型常量
void code()
{enum // 无名枚举,用于定义常量{ARRAY_SIZE = 10, // 定义数组大小};int array[ARRAY_SIZE] = {0};int i = 0;for(i=0; i< ARRAY_SIZE; i++){array[i] = i + 1;}
}
实例分析 : enum 的使用
#include <stdio.h>enum
{ARRAY_SIZE = 10, // 定义常量
};enum Color
{RED = 0x00FF0000, // 定义整形离散值GREEN = 0x0000FF00,BLUE = 0x000000FF
};void PrintColor(enum Color c)
{switch( c ) // 用于 switch case{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;default: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);
}
输出:
输出:
Color: GREEN (0x0000ff00)
1
2
3
4
5
6
7
8
9
10
sizeof 关键字
- sizeof 是编译器的内置指示符
- sizeof 用于计算类型或变量所占的内存大小
-
sizeof 的值在编译期就以确定
- sizeof 用于类型 : sizeof(type)
- sizeof 用于变量 : sizeof(var) 或 sizeof var
void code()
{int var = 0;printf("%d\n", sizeof(int));printf("%d\n", sizeof(var));printf("%d\n", sizeof var);
}
实例:
#include <stdio.h>double f()
{printf("D.T.Software\n");return 0.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);
}
输出:
输出:
var = 0, size = 4
size = 8分析: 注意 var = 0 ; sizeof(f()) = 8
sizeof 不是函数,不会在运行时计算变量或类型的值,而是在编译时,所有的 sizeof 都被具体的值替换。
sizeof(var++) 在编译时直接被替换,var++ 得不到执行。
typedef
- typedef 用于给一个已经存在的数据类型重命名
- typedef 本质上不能产生新的类型
-
typedef 重命名的类型:
- 可以在 typedef 语句之后定义
- 不能被 unsigned 和 signed 修饰
实例:
#include <stdio.h>
// --- 定义方式 1
typedef int Int32;// --- 定义方式 2
struct _tag_point
{int x;int y;
};
typedef struct _tag_point Point;// --- 定义方式 3
typedef struct
{int lengyh;int array[];
}SoftArray;// --- 定义方式 14
// 编译器没有要求被重命名的类型必须先定义在可以
typedef struct _tag_list_node ListNode;
struct _tag_list_node
{ListNode* next;
};int main()
{Int32 i = -100; // int// unsigned Int32 ii = 0; // ErrorPoint p; // struct _tag_pointSoftArray* sa = NULL;ListNode* node = NULL; // struct _tag_list_node
}
小结
- enum 用于定义离散值类型
- enum 定义的值是真正意义上的常量
- sizeof 是编译器的内置指示符
- sizeof 不参与程序的执行过程
typedef 用于给类型重命名
- 重命名的类型可以在 typedef 语句之后
版权声明:本文标题:enum, sizeof, typedef 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1702174254a551258.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论