枚举,结构体,共用体
来源:互联网 发布:原声吉他音箱 知乎 编辑:程序博客网 时间:2024/06/06 02:40
1、枚举(enum)
枚举的定义:
enum LOG_LEVEL
{
DBG,
INF,
WAR,
ERR,
FAT,
ALL,
OFF
};
void WriteInfor(LOG_LEVEL level)
{
switch(level)
{
case DBG:
printf("%d\n",DBG);
......
}
}
上述定义的枚举类型,默认为DBG=0,INF=1,依次类推。
(1)枚举类型是实数类型,可以跟int类型相互转换。 其所定义的常量子与枚举类型有同样的可见性,即DBG等可以被枚举类型外面的代码所看到。枚举类型没有名字限定作用。struct有名字限定作用。
(2)枚举类型所占的空间
C++标准文档中是这样说明的:“枚举类型的尺寸是以能够容纳最大枚举子的值的整数的尺寸”,同时标准中也说名了:“枚举类型中的枚举子的值必须要能够用一个int类型表述”,也就是说,枚举类型的尺寸不能够超过int类型的尺寸,但是是不是必须和int类型具有相同的尺寸呢?上面的标准已经说得很清楚了,只要能够容纳最大的枚举子的值的整数就可以了。在VS2010中sizeof的值为4。
(3)枚举和int是否可以互换
枚举长度可能比int小,有些情况下最好不用互换。
enum EType { e1 = 0, e2, e3 };
EType val;
std::scanf( "%d", &val );
枚举类型变量的尺寸不一定和int类型相同,这样一来我们采用%d就 是说将枚举类型变量val当作4字节的int变量来看待并进行参数压栈,而在某些编 译器下sizeof( val )等于1字节,这样scanf函数就会将val变量地址中的后续的三 字节地址也压入栈中,并对其进行赋值,也许val变量后续的三个字节的地址没有 特殊含义可以被改写(比如是字节对齐的空地址空间),可能会认为他不会出现错 误,其实不然,在scanf函数调用结束后会进行栈清理,这样一来会导致scanf函数 清理了过多的地址空间,从而破坏了外围函数的栈指针的指向,从而必然会导致程 序运行时错误。
2、结构体
3、共用体
- 结构体、共用体、枚举
- 枚举,结构体,共用体
- 结构体 枚举 共用体
- 结构体、共用体、枚举
- 结构体、共用体、枚举
- 结构体、共用体、枚举
- 结构体/枚举/共用体
- 结构体 共用体 枚举
- 结构体,共用体,枚举体,typedef
- C++结构体、共用体、枚举
- chapter3 结构体 共用体与枚举
- 结构体、共用体、枚举和typedef
- 数组&字符串&结构体&共用体&枚举
- 字符串&结构体&共用体&枚举
- C++ 共用体 枚举 结构体 介绍
- C++ 结构体 共用体和枚举
- 结构体,共用体,枚举类型
- 结构体、共用体和枚举
- Berkeley DB Java Edition
- CSDN特别收录 --- 超强的指针 *一辈子都找不到的牛B贴 .
- Facebook开源项目Hiphop-php使用介绍(原创)
- 几种游戏的分类和简称
- 计算程序的运行时间(C++) .
- 枚举,结构体,共用体
- MFC-对话框与数据交换 .
- VS2010利用向导添加数据源时出错
- hudson(jenkins) plugin
- Oracle高效分页技术
- Android教程之如何安装(卸载)apk文件到模拟器
- mysql 行变列
- 二单元Four
- D-Bus入门(二)——从ofono看d-bus