您的位置:首页 > 其它

复合数据类型(简答)

2016-05-03 16:28 85 查看
复合数据类型(简答)
这章内容主要是结构体,共用体,枚举类型,注意了解和掌握。
1.关键字的拼写
结构体 关键字 struct
共用体 关键字
union
枚举型 关键字 enum
类型别名 关键字 typedef

2.会定义结构体,定义结构体变量并初始化,定义结构体指针并初始化?
定义结构体:
struct Student
{
char name[8];
unsigned No;
float c;
float eng;
} ;
定义结构体变量并初始化:
struct Student a;
a = { "张三" , 2071010u ,80 .0,51.0 };

定义结构体指针并初始化:
结构体指针变量是一个用来存放指向结构体变量的指针变量,该指针变量的值就是它指向的结构体变量的起始值。
struct 结构体名 *结构体指针变量名;
例:
struct object
{
char name[10];
float high;
float weight;
} ;
main()
{
struct
object a= { "first", 1.73 , 74.2};
struct
object *p = &a;
printf("%s
%.2f %.2f \n",(*p).name
,(*p).high , (*p).weight);
}

3.结构体中的内存空洞指什么?
在结构体中,将不同类型的,互相关联的数据组成一个有机的整体。因此在不同的数据类型定义过程中,容易出现内存空洞。
比如:
(1) (2)
struct student struct student
{ {
int
a; int
a;

int b; char c;
char c; int
b;
} }
虽然这两个定义结果是一样的,但占据的内存是不同的。在32位的系统中,是以4个字节为一个单元,int 类型数据占4个字节,char 型数据占1个字节。故(1)的写法占9个字节,(2)的写法占12个字节。

4.定义共用体,定义共用体变量即初始化,定义共用体指针并初始化?
共用体与结构体的不同的是:结构体变量的各成员占用连续的不同的存储单元,而共用体变量的各成员占用相同的存储单元。由于共用体类型将不类型的数据在不同时刻存储到同一内存区域内,因此使用共用体类型可以更好地利用存储空间。
共用体的定义:
union grade

{

char g5;
int g100;
}

定义共用体变量并初始化:
union Student a;
a = { "张三" , 2071010u ,80 .0,51.0 };

定义共用体指针并初始化
union object
{
char name[10];
float high;
float weight;
} ;
main()
{
union
object a= { "first", 1.73 , 74.2};
union
object *p = &a;
printf("%s
%.2f %.2f \n",(*p).name
,(*p).high , (*p).weight);
}

5.共用体的特点?(两大特点)
(1)内存中每一瞬间只有一个成员起作用。
(2)起作用的成员是最后一次存放的成员。
(3)共用体变量的地址与其个成员的地址相同。
(4)不能在定义共用体变量时进行初始化。
(5)不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以用指向共用体变量的指针。
(6)共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现共用体类型的定义中,数组也可以作为共用体的成员。

6.大端字节序 VS 小端字节序

端模式分为:小端字节序和大端字节序,也就是字节在内存中的顺序。

小端字节序:低字节存于内存低地址;高字节存于内存高地址。如一个long型数据0x12345678

        0x0029f458  0x78

        0x0029f459  0x56

        0x0029f45a  0x34

        0x0029f45b  0x12

    在以上数据存放于内存中的表现形式中,0x0029f458 < 0x0029f459 < 0x0029f45a < 0x0029f45b,

可以知道内存的地址是由低到高的顺序;而数据的字节也是由低到高的,故以上字节序是小端字节序。

大端字节序:高字节存于内存低地址;低字节存于内存高地址。

        0x0029f458  0x12

        0x0029f459  0x34

        0x0029f45a  0x56

        0x0029f45b  0x79

    在以上数据存放于内存中的表现形式中,0x0029f458 < 0x0029f459 < 0x0029f45a < 0x0029f45b,

可以知道内存的地址是由低到高的顺序;而数据的字节却是由高到低的,故以上字节序是大端字节序。

7 定义枚举类型,并且说明 enum VS define?
枚举类型定义:
enum weekday { Sun,Mon,Tue,Wed,Thu,Fri,Sat};

宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已不存在了。而枚举是在程序运行之后才起作用的,枚举常量存储在数据段的静态存储区里。宏占用代码段的空间,而枚举除了占用空间,还消耗CPU资源

但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条
enum {.....}
明显比一大

define
更清晰,枚举也可以用来定义一些特殊类型,比如
Bool
,如:

typeenum {FALSE,TRUE} Bool;
但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条enum {.....}明显比一大堆define更清晰,枚举也可以用来定义一些特殊类型,比如Bool,如:typedef enum {FALSE,TRUE} Bool;

但也不能就此说宏比枚举好,如果需要定义非常多的常量,用一条
enum {.....}
明显比一大

define
更清晰,枚举也可以用来定义一些特殊类型,比如
Bool
,如:

typeenum {FALSE,TRUE} Bool;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: