您的位置:首页 > 其它

复合数据类型

2008-10-28 17:13 134 查看
今天好好学习了一下复合数据类型,结构体,联合,枚举。

结构体的定义:

struct name

{

int a;

int b;

}change;

name是数据类型,即该结构体的数据类型。以后就可以直接用name来定义该数据类型的变量。change是该结构体类型的变量。

结构体有几个特点:1 结构体是一种数据类型,并不占有内存。因此如果有如下定义:

struct name{

char a[10]=" abcd";

int b;

}change;

这种写法是错误的,因为不能直接在结构体内对成员赋值。并没有内存。

2 结构体所占内存的计算

一般是各个成员类型的内存之和,但是还要注意与运行环境有关,像32位机,每次处理数据是四个字节四个字节的处理,因此对于结构体中成员类型内存应该是四的倍数,例如:

struct name

{

int a;

char b;

char c;

}change ;

此时结构体的内存总和是4+4,8个字节。

当交换三个变量的定义顺序,b a c顺序,此时的内存是4+4+4 =12个字节。

但是 当成员中有一个short int 类型,此时就应该是2的倍数,因为short int 是两个字节,需要统一。

3 变化结构体定义的形式 如:

(1 ) struct neme

{

int a;

int b;

}c;

(2) struct

{

int a;

}c;

(3)typedef struct name

{int a;

int b;

}c;

上述三个例子中c 分别是 结构体变量,结构体变量,结构体类型名。一和二的不同是 第二种c是无名的变量。因此是独一无二的一个该类型。要想定义一个指针。可以在定义结构体的时候同时定义两个变量,一个 c *p; p=&c;此时便指向了c变量。这个时候用强制类型是不行的。

此外还要注意对结构体成员的访问,(*p).a;或者p->a;

联合
union name

{

int 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个字节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: