结构体、枚举、联合(day14)
一个存储区的地址必须是它自身大小的整数倍
(double类型存储区的地址只需要是4的
整数倍)
这个规则叫数据对齐
结构体里面的子存储区通常也需要遵守数据
对齐的规则
数据对齐会造成结构体内部子存储区之间
有空隙 结构体存储区的大小必须是它所包含的基本类型
存储区中占地最大类型存储区大小的整数倍
(如果这个基本类型是double类型则结构体
存储区的大小只需要是4的整数倍)
这个规则叫数据补齐
数据补齐可能在结构体最后增加一些浪费的
字节 枚举有可以用来创建新的类型
枚举类型存储区就是整数类型存储区,枚举
类型存储区里应该只能存放有限的几个整数
枚举类型也需要先声明然后才能使用,声明
的时候需要使用enum关键字
声明枚举类型的时候需要提供一组名称,计算机
为每个名称分配一个对应的整数,枚举
类型存储区里只能存放这些整数
不同枚举类型所能记录的整数范围不同
计算机把从0开始连续的非负数分配给枚举类型
里的名称
可以在声明枚举类型的时候指定为某个名称
分配的整数,这个名称后面的名称对应的
整数也会发生变化 联合也可以用来创建新的数据类型
联合也需要先声明然后再使用,声明联合的时候
需要使用union关键字
联合成员变量所占的存储区是互相重叠的
联合所有成员变量的地址都是一样的
联合存储区可以当作多种不同类型的存储区
使用,每个成员变量代表了一种可能的
类型
联合存储区的大小就是最大成员变量的大小 用来记录普通变量地址的指针叫做一级指针
二级指针可以记录一级指针的地址,通过它
可以找到捆绑的一级指针
声明二级指针时需要在指针变量名称前加** 二级指针变量名称前加**可以表示捆绑
的普通变量存储区
二级指针变量名称前加*可以表示捆绑
的一级指针存储区 二级指针可以代表指针数组但是不能代表
二维数组 无类型指针有可能记录一级指针的地址,这个
时候必须把这个指针强制类型转换二级
指针然后再使用 二级指针通常作为形式参数使用,使用二级
指针形式参数可以让被调用函数向调用
函数传递一个地址数据 C语言里函数也有地址
函数名称可以用来表示函数的地址
函数指针可以用来记录函数的地址
函数指针也需要先声明然后再使用
函数指针的声明可以根据函数声明变化得到 函数指针也分类型,不同格式的函数适合
与不同类型的函数指针捆绑
函数指针可以用来调用函数 函数指针可以作为形式参数使用
会作为实际参数使用的函数叫回调函数 可以在程序运行的时候临时决定需要分配多少
存储区
这种分配内存的方法叫动态内存分配
为了管理动态分配内存需要使用一组标准函数
为了使用这些标准函数需要包含stdlib.h头文件 malloc函数可以动态分配一组连续的字节
这个函数需要一个整数类型的参数表示希望分配
的字节个数
它的返回值表示分配好的第一个字节的地址
如果失败则返回值是NULL
函数的返回值记录在一个无类型指针里,必须
首先强制类型转换成有类型指针然后才能
使用 动态分配内存使用完以后必须还给计算机,否则
会造成内存泄漏问题
free函数可以用来释放动态分配内存
这个函数需要分配好的第一个字节的地址作为
参数
一起分配的内存必须一起释放
如果用指针做参数调用free函数则函数结束后
指针成为野指针,必须恢复成空指针
结构体、枚举、联合(day14)的更多相关文章
- C 碎片八 结构体&枚举&联合
一.结构体 1, 结构体定义 结构体类型的定义:任意数据类型变量的集合.用于描述一个具体的事物的信息,在C语言中描述一件事物一般都是用结构体 声明结构体类型的格式: struct 结构体名 {成员列 ...
- C++_知识点_结构体/枚举/联合
//C++中结构体的不同之处 #include <iostream> #include <string> using namespace std; int main(void) ...
- OC基础--结构体 枚举做类成员属性
结构体 枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期 毕业日期 -- 结构体 代码示例: 声明文件 Student.h: #import <Foundation ...
- C语言基本语法——结构体、联合和枚举
一.结构体 1.什么是结构体 2.结构体语法格式 3.结构体所占内存空间 4.结构体成员赋值 二.联合 1.什么是联合 2.联合语法格式 三.枚举 1.什么是枚举 2.枚举语法格式 一.结构体 1.什 ...
- C语言进阶——结构体,联合,枚举
----------------------------------------------------------我是一条划分线----------------------------------- ...
- C和指针 (pointers on C)——第十章:结构体和联合(上)
第十章 结构和联合 这个部分先介绍了.运算符,能够供直接訪问,还介绍了->运算符,它取代结构体指针的间接訪问操作(*struct).xxx 这一章新手理解起来不算太难,没有学过操作系统的话理解位 ...
- C# 结构体 枚举类型
注意:枚举类型和结构体都属于值类型. 结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的方法: struct student { public int nianl ...
- C# 类&结构体&枚举
类: class Lei //要和static void Main(string[] args)平级: { public int lei_int; //public是关键字,代表访问权限,这里是公 ...
- C#基础 结构体 枚举类型
结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的例子: struct student { public int nianling; public int fen ...
- C语言的结构体,枚举类型在程序中的作用
http://www.xue63.com/xueask-1221-12212854.html 结构和枚举类型从程序实现的角度来说,是用更接近自然语言的方式来表达数据.比如说实现2维空间的点,你可以使用 ...
随机推荐
- CSS之实现二级菜单动态出现
一直觉得二级菜单的出现效果仅仅有js才干控制.今天研究了一下阿里巴巴站点的首页,才发现,原来二级菜单的动态显示也能够使用CSS来控制,原来对CSS是静态的东西一直是误解它了,CSS也能够实现动态的效果 ...
- Oracle EBS LOV速度优化
一.现象 本文地址:http://blog.csdn.net/sunansheng/article/details/50952758 当我们的EBS LOV的SQL写得比較复杂.或者数据量比較多时,L ...
- PHP5+标准函数库观察者之实现
PHP的观察者设计模式实现相对简单,可是PHP5+版本号中已经有标准库类库支持,我们仅仅需简单继承并实现就能够了. 观察者:实现标准接口类库SplSubject. 一个注冊方法:attach.一个取消 ...
- SQL Server 2012内部原理及故障排除(专栏)
PROFESSIONAL SQL SERVER® 2012 INTERNALS AND TROUBLESHOOTING一书(可从这里下载).认为内容非常不错.自己也想对SQL Server 2012有 ...
- android开发之使用SQLite数据库(db文件)
在开发中,有时须要使用db文件数据库.所以就须要将其导入项目,再将其使用程序写入到应用的db文件下使用. 代码非常easy.能够拿来直接使用. 要使用须要两个步骤: 1.创建raw文件.导入db文件. ...
- 简化bigdecimal计算的小工具类
简化bigdecimal计算的小工具类 如果我们要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果( ...
- Codeforces--630J--Divisibility(公倍数)
J - Divisibility Crawling in process... Crawling failed Time Limit:500MS Memory Limit:65536KB ...
- SQL 导出表数据存储过程
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- ...
- JDK5.0新特性(静态导入、自动装箱/拆箱、增强for循环、可变参数、枚举、泛形)
JDK5中新增了很多新的java特性,利用这些新语法可以帮助开发人员编写出更加高效.清晰,安全的代码. 这些新特性主要有:1.静态导入2.自动装箱/拆箱3.增强for循环4.可变参数5.枚举6.泛型7 ...
- [转]逐步解說:在 WPF 應用程式中使用 ReportViewer 显示 rdlc
本文转自:http://msdn.microsoft.com/zh-tw/library/hh273267 若要在 WPF 應用程式中使用 ReportViewer 控制項,您需要將 ReportVi ...