基础数据结构和宏

【结构体】

一.认识结构体

//结构体是一种复合的数据结构,是将基础变量类型和复合的变量类型封装成的新的数据结构。

//自定义的类型。

【注】函数是对处理数据的功能的封装。

结构体是对存储数据的数据结构的封装。

将存储数据的数据结构和管理这些数据的方法封装到一起,就形成了类。

二.结构体的赋值和初始化

三.在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)

原文地址:https://www.cnblogs.com/liudongyan/p/4395171.html