指针
1.指针的基本概念
地址:用来区分不同内存字节空间的一个标号
指针:指针就是地址,地址就是指针,地址是一个编号,指针多了指向的概念
指针变量:用来存放指针(地址)的变量
2.指针的相关运算符
&获得变量在内存中的首地址,&运算符会让类型升级
*:左值:将右值放入指针指向的空间
右值:直接取指针对应空间中的值
*运算符会让类型降级,获得地址向下对应类型字节空间的值
3.指针变量的定义
形式:数据类型 *变量名;
4.指针初始化
形式:int *p = NULL;
NULL:空指针(指向内存地址为0x0的指针)
5.指针的算术运算
++:向内存高地址偏移指向数据类型大小个字节空间
--:向内存低地址偏移指向数据类型大小个字节空间
两个相同类型的指针相减:获得两个地址中间相差了多少个该类型的元素
6.指针的常见操作
指针变量本身p,修改p值可以改变指针变量的指向
指针变量所指空间*p,修改*p的值并不改变指向,只是利用指针修改对应空间中的值
7.指针作为函数参数
值传递:实参将值传递给形参
函数体内想使用函数体外部变量值的时候使用复制传递
地址传递:实参将地址给形参,形参是实参的指针,可以通过对形参取*改变实参的值
函数体内想修改函数体外部变量值的时候使用地址传递
8.指针和数组的关系
数组的数组名是指向数组第一个元素的指针常量 a == &a[0]
访问数组下标为n的元素:a[n] == *(a+n) == *(p+n) == p[n]
指针[偏移量] == *(指针 + 偏移量)
9.数组作为函数参数
第一种:int fun(int array[], int len);
第二种:int fun(int array[5]);
第三种:int fun(int *parray, int len);
三种形式均传入的是指针,最好使用第三种