复合数据类型(简答)
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;
这章内容主要是结构体,共用体,枚举类型,注意了解和掌握。
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;
相关文章推荐
- 防御性编程
- Codeforces Beta Round #94 div 2 C Statues dfs或者bfs
- 高性能网站建设指南
- iOS使用Object-C自定义cordova插件(-)
- 清除WKWebView的缓存
- UVa 10299 :Relatives 欧拉函数
- 练习三 1011
- Software Enginering-------Architecture Patterns
- opencv arm 交叉编译资料
- Python入门
- CSS3让登陆面板3D旋转起来
- Light 1414-February 29【容斥定理】
- sudoers 改成777后怎么改回
- win10中“windbg+vmware+win7双机调试”设置
- 跑步于我
- 作业七:用户体验设计案例分析
- SinalR+WebSocket
- app中打开另外的app
- 算法训练 传纸条
- Android之自定义View的实现