结构体 struct
struct 结构体名{
类型名1 成员名;
……
类型名n 成员名
struct 结构提名 *p;//p是指向本类型的指针
};
class的成员默认为private,struct的成员默认是public
结构体的位字段,每个成员都被成为为字段
struct reg{
unsigned int SN:4;
unsigned int SM:1;//SM自能占用1bit
bool good:4;//good只能占用4个bit
}
共用体 union
共用体只能存放一个选中的成员,当对union的成员赋值时,其他成员就会被重写,其值就不存在了
union 结构体名{
类型名1 成员名;
……
类型名n 成员名
};
- 结构体所占内存为最大数据类型的整数倍(因为字节对齐) 共同体所占内存为最大数据类型的大小
枚举 enum
enum {a,b=5,c,d=4,e};
//如果不给枚举类常量赋值,编译器会自动给每个常量赋值,第一个为0.后面依次加1
//a=0,c=6,e=5
枚举只是声明了不占内存,没有定义变量。sizeof(枚举类)=4
sizeof运算符
sizeof是一种单目运算操作符,以字节的形式返回操作数的存储大小。
-
不能被sizeof的:
函数名称、函数返回类型为空、位域成员 -
sizeof()与strlen()的区别:
strlen()遇到’\0’才会停止计数,且不对’\0’计数
sizeof要对’\0’计数
char cal[]={'c','a'};
char cal2[]={'c','a','\0'};
strlen(cal);//其值没有定义
strlen(cal2);//=2
sizeof(cal);//=2
sizeof(cal2);//=3
- 对指针进行sizeof
int *p;
sizeof(p);//=4
sizeof(*p);//=4
char *p;
sizeof(p);//=4
sizeof(*p);//=1