15.数据类型

来源:互联网 发布:机械图纸软件有哪些 编辑:程序博客网 时间:2024/06/18 14:24
同类型的结构体变量之间可以直接使用赋值
    操作符进行赋值


结构体不适合作为函数的形式参数使用,因为
    这样会造成时间和空间的浪费
应该采用结构体指针作为函数的形式参数


结构体可以作为函数的返回值存储区使用,但是
    这样也会造成时间和空间的浪费
应该使用结构体指针作为函数的返回值存储区
不要把局部结构体变量的地址赋值给结构体
    指针返回值存储区


内存中分配存储区的时候每个存储区的地址必须
    是它自身大小的整数倍(double类型存储区
的地址必须是4的整数倍)
如果不做特殊处理结构体内部的各部分也应该
    遵守这个规则
这个规则叫做数据对齐


数据对齐会导致结构体内部各部分之间有空隙,
    不一定是相邻的


结构体变量的大小一定是它内部包含的基本类型
    存储区中占地最大类型大小的整数倍
这个规则叫做数据补齐
数据补齐会导致结构体后面多一些浪费的字节


数据对齐和补齐会导致结构体内部各部分的
    顺序不同则大小就不同


枚举也可以用来建立新的数据类型
枚举建立的类型中包含有限个整数,每个整数
    用一个名字表示
声明枚举类型时需要使用enum关键字
编译器自动为枚举大括号中的每个名字指定一个
    对应的整数,第一个名字对应的整数是0,
向后依次类推
可以在程序中把枚举中的名称当作整数来使用
可以在声明枚举类型时给某个名称指定对应的
    整数
如果某个名称被指定了对应的整数则它后面
    名称对应的整数都会随着调整
枚举类型的效果和宏定义的效果类似,如果
    明确要求指定每个名称对应的整数就应该
使用宏,否则就应该使用枚举


联合也可以用来创建新的数据类型
声明联合的时候需要使用union关键字
联合声明中同样包含多个部分,所有部分都从同
    一个地址开始分配
联合里所有部分所占的存储区是重叠的
联合变量的大小是其中最大子部分的大小(结果也要满足补齐)
如果修改了联合中某个部分的内容则其他部分的
    内容也可能因此而改变
如果希望把内存中一段存储区当作不同类型的
    存储区使用的时候就可以使用联合


动态分配的存储区可以在程序运行的时候才确定
    个数
为了使用动态分配的存储区需要使用一组标准
    函数
为了使用这些标准函数需要包含stdlib.h头文件


malloc函数可以在内存中动态分配一组连续的字节
这个函数需要一个整数作为参数,这个参数表示
    需要分配的字节个数
这个函数的返回值表示分配好的第一个字节的地址
这个函数有可能失败,如果失败则返回值是空地址
只能通过这个函数的返回值使用分配好的字节,
    所以这个返回值要长期保存
这个函数没有限制把分配好的存储区当什么类型
    来使用,所以他的返回值是void*类型的
这个函数的返回值必须首先强制类型转换成有类型
    指针然后再使用


动态分配存储区的生命周期由程序决定,如果不再
    使用某些动态分配的存储区就必须把它们还给
计算机,这叫做内存的释放
free函数可以把一段动态分配的存储区释放
这个函数需要动态分配存储区的首地址作为参数
这个函数结束后这个地址不再能使用
一段内存只能释放一次
一次分配的内存必须一次释放(不能分段释放)


可以把动态分配内存的首地址赋值给指针类型
    返回值(这些动态分配的内存不能在函数里
释放)
这种使用方法导致分配内存的函数和释放内存
    的函数不是同一个


预习:
    1.动态内存分配(calloc,realloc)
2.函数指针
3.C语言其他标准函数


作业:
    1.编写函数根据两个已知点的位置计算
   中间点的位置。(用动态分配内存
记录中间点位置)在主函数里把
中间点位置打印在屏幕上。















0 0
原创粉丝点击