指针数组就是存放指针的数组。同理,指针数组的类型也是数组名去掉后的剩余部分。定义方式如下:
type *p[size]; type是存放指针指向的对象的类型,p是数组名,size是数组的大小。
表示ptr 是一个包含 size 个指向type类型的指针的数组;
指针的指针
只传指针无法修改指针指向的位置(值传递)
装有地址的指针
int *p;
int **q = &p;
- 第二行代码中,‘int *’说明变量q的基类型,*q说明变量q是一个指针变量。
- 被调函数修改主调函数。传参传的是主调函数定义的变量的地址
结构体
用户可以通过结构体自定义数据类型,将几种不同的数据类型联系起来,编程规范建议将结构体的标识符首字母大写,其次’{}‘末尾要加‘;’。
先声明结构体再定义。关于结构体的运算符分别是指向结构体成员运算符和结构体成员运算符,均为一级,结合方向自左向右。
指针变量传参优于结构体变量传参,不需要重复开辟、销毁内存空间,更省内存,效率也更高。
初始化
变量 .p
指针指向就是值
内存对齐
RAM与CPU,RAM存储数据,CPU计算数据。通过控制总线、地址总线和数据总线进行信息的交互,数据的传输依靠数据总线,在32位操作系统中,单次传输的大小是4字节,64位操作系统中这个值是8字节。
内存对齐流程
结构体成员中去查找最长的元素,最终按该元素长度对齐,结构体最终大小能够整除这个数。
每个结构体成员所处的位置(也就是偏偏移量)。