【结构体】
一.认识结构体
//结构体是一种复合的数据结构,是将基础变量类型和复合的变量类型封装成的新的数据结构。
//自定义的类型。
【注】函数是对处理数据的功能的封装。
结构体是对存储数据的数据结构的封装。
将存储数据的数据结构和管理这些数据的方法封装到一起,就形成了类。
二.结构体的赋值和初始化
三.在iOS当中结构体的典型应用
四.返回结构体的函数
*五.结构体的大小
【不同设备对齐方式不同】
六.结构体指针
【枚举】
型号 T180 TT180
色彩 红色 黄色
这些数据不适合使用基础数据类型存储,也不能封装成结构体。
这些简单的,直观地数据。可以使用枚举进行存储
【宏】
一.认识宏
//宏是发生在预处理阶段的简单的字符串替换
【见预处理相关的C代码】
//编译分四个步骤
预处理 C ——> C
//展开头文件,替换宏
gcc -o 2.i 2.c -E
编译 C ——> 汇编
//主体步骤
gcc -o 2.s 2.i -S
汇编 汇编 ——> 二进制码
gcc -o 2.o 2.s -c
链接 生成可执行程序
gcc -o test 2.o
二.宏
【注】宏的作用千变万化,灵活使用有很多作用。这里介绍简单的一些功能。
//将一些可能被修改的常量,声明为宏。便于使用,便于修改。CocoaLigature1
三.带参的宏
//宏的“参数”和“返回值”都是字符串,而不是一个值,如果要保证参数和返回值是一个整体,需要用括号括起来。
#define MUL(a, b) ((a) * (b))
四.多于一条语句的宏
//当宏中有多条语句,理应将多条语句放到一个大括号中。
#define SWAP(a, b) {int tmp = a; a = b; b = tmp;}
//当宏中需要换行,需要在上一行末尾加上,连接下一行。
#define SWAP(a, b) {int tmp = a;
a = b;
b = tmp;}
【动态内存分配】
一.静态内存分配
//所分配内存空间的大小,在编译时确定,在运行时无法修改。
//如,栈段和只读数据段,数据段都是静态内存分配。
【缺点】
现在我需要输入100个字符串,输入一个,打印一个。其中99个不超过3个字符,有1个占3000字符。问字符数组开多大?
二.动态内存分配
//分配的空间在堆段,由程序猿在编写代码时规定空间大小。在运行时可以任意的开辟,释放甚至修改空间大小。
=========
栈段
…
堆段
数据段
只读数据段
代码段
=========
*三.区别
静态内存分配
编译时决定空间的大小
确定空间大小的是编译器
开辟的空间在栈段,数据段,只读数据段
自动释放
动态内存分配
程序运行时,确定空间大小
确定空间大小的是程序猿
开辟的空间在堆段
通过代码手动释放
who when where how
【注】堆空间不会随着函数调用结束而释放,但是如果程序结束,所占用的空间(包括堆)都会消失。
pow(2, i)