结构体、枚举、联合(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维空间的点,你可以使用 ...
随机推荐
- 飘逸的python - 实现glob style pattern
一说起通配符,大家非常快就会想起*和? 号,有了通配符,使得表达能力大大增强,非常多linux命令都支持这个东西,事实上就是glob style pattern. 就连redis的keys命令都支持g ...
- PHP中http协议详解
对PHP文件来说 Php能够有 html css javascript php脚本 flash它的不同部分是在不同的地方运行的(server和client) http协议 1. http协议是建 ...
- jsp上传下载+SmartUpload插件上传
使用之前须要自己下载jspSmartUpload.jar包 这里找到一个支持中文的jar包,下载地址例如以下: http://www.blogjava.net/Files/hijackwust/jsm ...
- OC第六课
主要内容:Block(Block语法.Block使用.Block实现数组排序) 一.Block语法 Block:块语法.本质上是匿名函数(没有函数名称的函数),和函数指针非常相似 函数回想: 实现了某 ...
- AppFuse 3常见问题与解决方法
非常长一段时间没做SSH项目了.近期抽出时间看了一下升级到3.x的appfuse,对新版本号使用过程中出现的一些问题进行了排查.汇总例如以下.以备后用.本文原文出处: http://blog.csdn ...
- oracle Plsql 运行update或者delete时卡死问题解决的方法
oracle Plsql 运行update或者delete时 遇到过Plsql卡死问题或者导致代码运行sql的时候就卡死. 在开发中遇到此问题的时候,本来把sql复制出来,在plsql中运行,Sql本 ...
- STL_算法_逆转(reverse,reverse_copy)
C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) //全部容器适用 reverse(b,e) //逆转区间数据 reverse_copy(b,e,b2) /** ...
- luogu1984 [SDOI2008] 烧水问题
题目描述 给出水的比热容.冰点和沸点,问将$n$杯有$\frac{1}{n}\mathrm{kg}$的水从冰点加热到沸点所需最小热量.不一定相邻的两杯水间可以无热量损失地热传递至两者温度相同. 题解 ...
- C#中数据库备份还原 精简
C#中数据库备份还原 使用前要导入SQLDMO.dll(在com组件中导入Microsoft SQLDMO Object Library即可) /// /// DbOper类,主要应用SQLD ...
- matlab中s函数编写心得-转自水木
S函数是system Function的简称,用它来写自己的simulink模块.(够简单吧,^_^, 详细的概念介绍大伙看帮助吧)可以用matlab.C.C++.Fortran.Ada等语言来写, ...