[C]语法, 知识点总结(二. 结构体, 类别名, static, const)
结构体
定义:
struct Student{ // 定义结构体Student, stu是创建的对象
char a[17]; // 结构体里面可以有多种不同类型的变量
int b;
char c;
double d;
}stu;
printf("%ld", sizeof(stu)); // 打印的是40
分析:

假设从地址0开始给结构体空间
分配char a[17];(17字节) -> 现在偏移量是17
接下来存int(4字节), 根据对齐方式, 当前偏移量必须是4的倍数
需要补全3个字节达到偏移量20 (这3个字节什么也不存)
分配int b; 偏移量24
分配char c;(1字节), 偏移量24是1的倍数, 所以继续分配, 偏移量25
分配double d;(8字节), 根据要求偏移量必须是8的倍数, 25需要补7
补全7个字节, 什么也不存, 然后加上这8字节共40个字节
预编译, 编译, 运行
- #######define, #import, #include, #warning, #prama mark, #error, #if, #else, #endif 等等, 只要是用#开头的, 都是预编译, Xcode一直在进行预编译.
- Command + B 编译, 是把OC代码转换成C代码等资源.
- 运行, 就是程序在机器中, 跑起来
- #######define N 3 (把项目中所有N换成3)
类别名
typedef int* apple1; // 给int *起个别的名字叫 apple1
apple1 p = NULL, q = NULL; (apple1 还是int *)
static
static int a = 10; // 在编译时已经执行完了, 运行的时候不再执行, 确保a在每次运行的过程当中只初始化一次
(可以设置断点, 运行时候不会停在它身上-> 代表运行时不执行这行代码)
使用:
void fun() {
static int a = 0; // 下次走的时候,不想让a释放
a++;
}
const
const 声明的东西是 readonly(只读) 存放在常量区 (节省栈内存)
- const int *a *a = 5 内容不能变 指针a可以指向别的
- int * const a 指针不可变, 内容可以变
- int const * const a 都不可以变 (const和int可以换位置)
[C]语法, 知识点总结(二. 结构体, 类别名, static, const)的更多相关文章
- 枚举类 enum,结构体类 struct
1.枚举类型的值,直观易于理解,见词知意. 格式: enum 枚举类名:值类型 { 值1, 值2, 值n } 每个值默认(省略“:值类型”)以int型数据存储,从0开始. 使用格式:枚举类名 变量=枚 ...
- 5.Swift枚举|结构体|类|属性|方法|下标脚本|继承
1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum Celebrity{ case DongXie,XiDu,Nandi,BeiGai } // 从左 ...
- Swift枚举|结构体|类|属性|方法|下标脚本|继承
1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum Celebrity{ case DongXie,XiDu,Nandi,BeiGai } // 从左 ...
- [转]C++结构体|类 内存对齐详解
内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址).访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 . 为什么需要内存对齐?对 ...
- 【C++】结构体/结构体数组/结构体指针/结构体嵌套/函数参数/const
一.结构体声明 struct Student { //成员列表 string name; int age; int score; }; //s3;定义时直接声明 int main() { struct ...
- C# 一些知识点总结(二)_路径类,编码类,文件类...
Path 类:路径类path.GetFileName("文件路径")//获取完整文件名,包括文件名和文件拓展名Path.GetFileNameWithoutExtension(&q ...
- QMap的key也可以是一个结构体类吗?
QMap<usbsnvidpid, QVector<QString>> USBVIDPIDTIME; USBVIDPIDTIME.insert(m_vidpidsn, time ...
- Swift超详细的基础语法-结构体,结构体构造器,定义成员方法, 值类型, 扩充函数
知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结构体是值类型 1. 基本概念 1.1 概念介绍 结构体(struct)是由一系列具有相 ...
- oc语言学习之基础知识点介绍(二):类和对象的进一步介绍
一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...
随机推荐
- 做游戏的小伙伴们注意了,DDoS还可以这样破!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 作者:腾讯DDoS安全专家.腾讯云游戏安全专家haroldchen 摘要:在游戏出海的过程中,DDoS攻 ...
- 服装盘点机PDA在服装行业颜色尺码仓库条码高效管理应用
服装行业的商品管理的特点是需要管理颜色和尺码 具体逻辑就是: 什么商品,什么颜色,什么尺码,入库多少个? 什么商品,什么颜色,什么尺码,出库多少个? 什么商品,什么颜色,什么尺码,还有库存多少个? 如 ...
- ats透明代理
透明代理是拦截客户端和服务器之间的连接而不可见的代理能力(比如ats). 必须要有一个网关设备,所有网络流量都通过该设备从客户端传递到Internet(或外部云).网关负责有效的将ATS拼接到该流量的 ...
- 机器学习初入门03 - Matplotlib
这一部分很简单,所以以代码的形式给出,在实际学习开发中,Matplotlib最好只把它当成一个画图的工具来用,没有必要深究其实现原理是什么. 一.折线图的绘制 import pandas as pd ...
- A-Softmax的总结及与L-Softmax的对比——SphereFace
A-Softmax的总结及与L-Softmax的对比--SphereFace \(\quad\)[引言]SphereFace在MegaFace数据集上识别率在2017年排名第一,用的A-Softmax ...
- linux分区命名
linux中任何内容都是文件 硬盘 文件 用户 都是文件 硬件设备文件名称 ide硬盘 /dev/hd[a-d] scsi/sata/usb硬盘 /dev/sd[a-p] 光驱 /dev/cdrom/ ...
- ESXi 系统管理员命令 [转帖]
来源 https://blog.csdn.net/zy_strive_2012/article/details/53336000 正如所有的虚拟化管理员都知道,要应对VMware基础设施上需要的更多虚 ...
- Delphi中如何实现模拟组合按键,如发送Ctrl+F的按键
利用 keybd_event函数可实现,如下面的代码用以实现在一个公共菜单中模拟Ctrl_F按钮以调用DBGridEH的查找对话框功能:这是在一个ActionList中的某一Action的OnExec ...
- js写插件教程深入
原文地址:https://github.com/lianxiaozhuang/blog 转载请注明出处 js 写插件教程深入 1.介绍具有安全作用域的构造函数 function Fn(name){ t ...
- We Need More Bosses CodeForces - 1000E(缩点 建图 求桥 求直径)
题意: 就是求桥最多的一条路 解析: 先求连通分量的个数 然后缩点建图 求直径即可 #include <bits/stdc++.h> #define mem(a, b) memset(a ...