一、指针特点
1.让代码更加简洁高效
2.提供直接访问内存的操作
3.利用指针可以直接操作硬件
二、指针概念
(一)地址:为了区分内存中不同字节的编号(0到2^16-1)
(二)指针:指针就是地址,地址就是指针,指针地址多了指向的概念
(三)指针变量:存放指针(地址)的变量(64位操作系统中所有指针变量均为8个字节)
三、指针相关运算符
1.&:取地址运算符,获得变量在内存空间中的首地址
1.1只有变量(左值(可以写在等号左边))才能&,常量和表达式不能进行&操作
1.2&构成的表达式为:变量在内存空间中的首地址
int Num = 0;
&Num:得到Num在内存空间4字节空间中的首地址
1.3&构成的表达式类型位:变量的类型升级后的类型
int Num;
&Num:int -> int *
2.*:获得指针指向的空间,或者对应空间中的值
2.1*运算符连接的内容必须为指针类似,不能是普通变量类型
2.2如果直接使用*对应的表达式,表达式值为:该指针指向空间中的值
*&Num; //获取&Num指向的空间中int类型的值
2.3如果使用*对应的表达式其类型为:指针类型降级后的类型
int *p;
*p;//int * -> int
2.4*对应的表达式作为左值表示,将等号右边的值放入指针指向的空间
四、指针变量的定义
不能使用未初始化的指针
(一)存储类型 数据类型 *变量名
(二)野指针
定义:未经初始化的指针或者指向已经被释放空间的指针
(三)空指针(NULL)
定义:指向内存空间为0x0的指针称为空指针
内存地址0x0空间为只读空间,不能复制,NULL指针不能执行*p = value操作
五、指针特性
变量的访问形式
(一)直接访问:通过变量的变量名访问变量空间
(二)间接访问:通过变量在内存中的地址访问变量空间
六、指针的算术运算
(一)算术运算符
指针偏移的大小由指针指向的数据类型大小决定
两个指针相减:两个地址间相减数然后除数据类型
(二)不同指针类型之间的区别
1.*操作时处理方式不同
2.算数运算
六、指针常见操作
注意:指针有两个需要请注意的概念:指针变量的本身,指针指向的空间。
1.对指针变量:p或者q修改,改变的是指针的指向
2.对*p或者*q:改变的是指针指向的空间,但是它的指向是不变的
七、指针作为函数参数
(一)值传递
1.实参将值传给形参,形参值改变
2.函数体内部想使用函数体外部变量值的时候,使用值传递
(二)地址传递
1.实参将地址传递给形参,形参是指向实参的指针,可以利用形参修改实参的值
2.函数体内部想修改函数体外部变量的值的时候,使用地址传递
八、练习