结构体

定义:
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)的更多相关文章

  1. 枚举类 enum,结构体类 struct

    1.枚举类型的值,直观易于理解,见词知意. 格式: enum 枚举类名:值类型 { 值1, 值2, 值n } 每个值默认(省略“:值类型”)以int型数据存储,从0开始. 使用格式:枚举类名 变量=枚 ...

  2. 5.Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  3. Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...

  4. [转]C++结构体|类 内存对齐详解

    内存地址对齐,是一种在计算机内存中排列数据(表现为变量的地址).访问数据(表现为CPU读取数据)的一种方式,包含了两种相互独立又相互关联的部分:基本数据对齐和结构体数据对齐 . 为什么需要内存对齐?对 ...

  5. 【C++】结构体/结构体数组/结构体指针/结构体嵌套/函数参数/const

    一.结构体声明 struct Student { //成员列表 string name; int age; int score; }; //s3;定义时直接声明 int main() { struct ...

  6. C# 一些知识点总结(二)_路径类,编码类,文件类...

    Path 类:路径类path.GetFileName("文件路径")//获取完整文件名,包括文件名和文件拓展名Path.GetFileNameWithoutExtension(&q ...

  7. QMap的key也可以是一个结构体类吗?

    QMap<usbsnvidpid, QVector<QString>> USBVIDPIDTIME; USBVIDPIDTIME.insert(m_vidpidsn, time ...

  8. Swift超详细的基础语法-结构体,结构体构造器,定义成员方法, 值类型, 扩充函数

    知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结构体是值类型 1. 基本概念 1.1 概念介绍 结构体(struct)是由一系列具有相 ...

  9. oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

    一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...

随机推荐

  1. debug 在windows下的使用

    debug是什么? debug是一款windows和DOS系统下的一款软件,其最早可追溯到1937年的"马克1号"(具体度娘):早期debug主要在DOS和windows系统中,它 ...

  2. 强化学习算法DQN

    1 DQN的引入 由于q_learning算法是一直更新一张q_table,在场景复杂的情况下,q_table就会大到内存处理的极限,而且在当时深度学习的火热,有人就会想到能不能将从深度学习中借鉴方法 ...

  3. Hexo初体验

    title: Hexo初体验 date: 2018-05-10 tags: Hexo categories: Hexo --- Hexo本地安装 Node.js安装 Hexo npm安装如下 npm ...

  4. PAT甲级题解-1047. Student List for Course (25)-排序

    一开始是建立了course[2501][40001]数组,存储每节课的学生编号然后for循环两层输出,但这样复杂度为O(2500*40000),也很明显导致最后时间超时后来发现最多40000学生,每个 ...

  5. C++ new和delete 堆和栈

    一.new和delete基本用法 程序开发中内存的动态分配与管理永远是一个让C++开发者头痛的问题,在C中,一般是通过malloc和free来进行内存分配和回收的,在C++中,new和delete已经 ...

  6. 该帐户当前被锁定,所以用户 'sa' 登录失败。系统管理员无法将该帐户解锁。

    用WINDOWS账户登录查询分析器,输入一下语句并执行: ALTER LOGIN sa ENABLE ; GO ALTER LOGIN sa WITH PASSWORD = '你的新密码' unloc ...

  7. hybrid浅记

    目前首次接触hybrid项目,故根据翻阅了解后,浅记对它的认识. hybrid是携程推出的一个项目框架,其优点是:跨平台.开发效率高.开发成本相对较低,其不足是:体验不如Native hybrid设计 ...

  8. springboot+mybatis结合使用

    springboot+mybatis结合使用与普通的ssm配置差别不大,但是少了很多的配置,如spring.xml  web.xml,  给程序员减轻了很多负担 首先创建带有mybatis框架的项目 ...

  9. php环境搭建及入门

    在php文件里,写入header('content-type:text/html;charset = uft-8'); <?php header('content-type:text/html; ...

  10. [转帖]Kubernetes及容器编排的总体介绍【译】

    Kubernetes及容器编排的总体介绍[译] 翻译自The New Stack<Kubernetes 生态环境>作者:JANAKIRAM MSV和 KRISHNAN SUBRAMANIA ...