day10练习
指针
1.指针特点:
1.让代码更加简洁高效
2.提供直接访问内存的操作
3.利用指针可以直接操作硬件
2.指针概念:
1.地址:为了区分内存中不同字节的编号(寻址范围:0 - 2^64-1)
2.指针:指针就是地址,地址就是指针,指针比地址多了指向的概念
3.指针变量:存放指针(地址)的变量(64位操作系统中所有指针变量均为8个字节)
3.指针相关运算符
1.运算符:
1. &:取地址运算符,获得变量在内存空间中的首地址
只有变量(左值)才能&,常量和表达式不能进行&操作
&构成的表达式值为:变量在内存空间中的首地址
&构成的表达式类型为:变量的类型升级后的类型
2. *:获得指针指向的空间,或者对应空间中的值
*运算符连接的内容必须为指针类型,不能是普通变量类型
如果直接使用*对应的表达式,表达式值为:该指针指向空间中的值
如果使用*对应的表达式其类型为:指针类型降级后的类型
*对应的表达式作为左值表示,将等号右边的值放入指针指向的空间
4.指针变量的定义
1.定义方法:
存储类型 数据类型 *变量名
注意:不能使用未经初始化的指针
2.野指针:
未经初始化的指针或者指向已经被释放空间的指针,称为野指针
3.空指针:
指向内存地址为0x0的指针为空指针,用NULL来表示
内存地址0x0空间为只读空间,不能赋值,NULL指针不能执行*p = value操作
4.指针特性:
变量两种访问形式:
1.直接访问:
通过变量的变量名访问变量空间
2.间接访问:
通过变量在内存中的地址访问变量空间
5.指针的算术运算
1.算术运算符:
指针偏移的大小由指针指向的数据类型大小决定
两个指针相减得到的结果为,两个地址间相差的数据元素个数
2.不同指针类型之间的区别:
*操作时处理方式不同
算数运算
6.指针常见操作
1.指针需要注意:
指针有两个需要注意的概念:指针变量本身,指针指向的空间
对指针变量:p或者q修改,改变的是指针的指向
对*p或者*q操作,改变的是指针指向的空间,指针还是指向原有的空间
7.指针作为函数参数
1.值传递
实参将值传递给形参,形参的值改变,实参不会改变
函数体内部想使用函数外部变量值的时候,使用值传递
2.地址传递
实参将地址传递给形参,形参是指向实参的指针,可以利用形参修改实参的值
函数体内部想修改函数体外部变量值的时候,使用地址传递
eg. 封装函数交换两个数字顺序(用指针)
eg.封装函数求最大公约数和最小公倍数,用指针
eg.封装函数接收年月日