今天好好学习了下复合数据类型结构体联合枚举
结构体定义:
struct name
{
a;
b;
}change;
name是数据类型即该结构体数据类型以后就可以直接用name来定义该数据类型变量change是该结构体类型变量
结构体有几个特点:1 结构体是种数据类型并不占有内存因此如果有如下定义:
struct name{
char a[10]=" abcd";
b;
}change;
这种写法是不能直接在结构体内对成员赋值并没有内存
2 结构体所占内存计算
般是各个成员类型内存的和但是还要注意和运行环境有关像32位机每次处理数据是 4个字节 4个字节处理因此对于结构体中成员类型内存应该是 4倍数例如:
struct name
{
a;
char b;
char c;
}change ;
此时结构体内存总和是4+48个字节
当交换 3个变量定义顺序b a c顺序此时内存是4+4+4 =12个字节
但是 当成员中有个 类型此时就应该是2倍数 是两个字节需要统
3 变化结构体定义形式 如:
(1 ) struct neme
{
a;
b;
}c;
(2) struct
{
a;
}c;
(3)typedef struct name
{ a;
b;
}c;
上述 3个例子中c 分别是 结构体变量结构体变量结构体类型名和 2区别是 第 2种c是无名变量因此是独无 2个该类型要想定义个指针可以在定义结构体时候同时定义两个变量个 c *p; p=&c;此时便指向了c变量这个时候用强制类型是不行
此外还要注意对结构体成员访问(*p).a;或者p->a;
联合
union name
{
a;
char b;
}change;
共用体结构定义和结构体定义是样只是内存分配形式不样共用体是占用数据类型最大类型内存
如上面例子可知该共用体内存是4个字节
因此对共用体赋值时候会出现麻烦例如:
change.a=0;
change.b=-7;
cout<<change.a;
此时结果不是-7;共用体系统内存非配是底地址靠齐因此-7是占个字节最高位是符号位但是对于整形数来说并不是符号位所以高位都是0结果是256-7=249;所以对共用体赋值定要注意
枚举
enum day{mon,tue,wed,thr};
枚举类型day是类型mon 等是枚举值系统默认从0开始赋值后个事前个加而且 枚举值还可以自己来对其赋值
如:mon=4,tue,wed=7,thr
此时枚举值是4 5 7 8
可以定义枚举变量 day a;
a=0;这样赋值是不对枚举类型变量赋值只能是枚举值值因此a=mon这个时候就是正确
还有 枚举类型内存 都是4个字节
最新评论