结构体和指针详解
结构型和指针型:
结构型
结构型可以理解为用户用基本类型为原料制作的数据类型,比如数组是由多个相同数据类型的变量组合起来的。但是如果要用到不同的数据类型该怎么办呢?这时候就用到结构体了。结构体可以制作新的数据类型,即可以用系统已经有的不同的基本数据类型或用户定义的结构型来组合成用户需要的复杂数据类型。
指针型
指针型变量里装的是变量的地址,通过指针可以找出这个变量在内存中的位置。指针型变量的定义是在变量名之前加了一个 *
。*a
是取变量a
的内容,&a
是取变量a
的地址。语句a = &b
是将变量b
的地址存于变量a
中,即我们常说的指针a
指向b
。
- 结点的构造
指针型用的最多的就是和结构型结合起来构造节点(如链表的结点、二叉树的结点等)。
1) 链表结点的定义
链表的结点有两个域:一个是数据域,用来存放数据;另一个是指针域,用来存放下一个结点的位置。
链表结点的结构型定义如下:
1 | typedef struct Node |
结构体名字为Node,结构体成员有一个是用自己来定义的和自己类型相同的变量的指针(struct Node *next)。
2) 二叉树结点的定义
在链表结点结构型的基础上,再加上一个指向自己同一类型变量的指针域,即二叉树结点结构型。
1 | typedef struct BTNode |
利用空间申请函数申请一个结点空间:BT = (BTNode*)malloc(sizeof(BTNode));
一般来说,用结构体变量直接取分量,其操作用“.
”;用指针结构体变量的指针来去分量,其操作用“->
”,->
是结构体指针运算符。
- 关于 typedef 和 #define
- typedef
typedef
可以理解为给现有的数据类型起一个新名字。如typedef struct{...} TypeA
即给struct{...}
起了一个新名字TypeA
。
#define
定义常量,以达到更人性化、更容易理解的目的。如:
1 |
结构体和指针详解
1.absolute和relative定位
2.display:table-cell在布局上的应用
3.两列布局css
4.解决GitHub访问不了问题
5.Collection集合和Map集合
6.JDK,JRE和JVM