1. 准确理解指针
- 指针就是地址。
&a是变量a的指针,即变量a的地址。
数组名是一个指针,即数组首元素的地址。
函数名是一个指针,即函数代码区首字节的地址。 - 地址是 带类型的地址
一个指针型数据包含3个信息:- 存储的值(纯地址)
- 他本身的类型(指针类型 * )
- 基类型(地址指向的数据的类型)
- 什么叫“指向”?
把谁的地址存放在指针变量中,就说这个指针变量指向谁 只有与指针变量基类型相同的类型的数据的地址才能存放到相应指针变量中。
2. 有关指针变量的归纳比较
变量定义 | 含义 |
---|---|
int i; | 定义整型变量 i |
int *p; | 定义指向整型数据的指针变量 p |
int a[5]; | 定义整型数组 a,有5个元素 |
int *p[4]; | 定义指针数组p,有4个指针元素,都指向整型数据 |
int (*p)[4]; | 定义指针变量p,指向含有4个元素的整型一维数组 |
int f(); | 定义方法 f,返回值类型为整型 |
int *p(); | 定义方法p,返回值为指向整型数据的指针类型 |
int (*p)(); | 定义指向方法的指针变量p,方法返回值类型为整型 |
int **p; | 定义指针变量p,其值为指向整型数据的指针 |
void *p; | 定义指针变量p,基类型为void,不指向任何数据 |
3. 有关指针的运算
- 定义一个指针变量
int *p;
p++,p–,p+i,p-i,p+=i,p-=i;均表示指针变量的原值(地址)和他所指向的变量所占用的存储单元的字节数相加减。 - 指针变量的值只能是地址。
- 如果两个指针指向同一个数组,则他俩相减得两个指针间的元素个数;两个指针可以进行比较得哪个指向前面元素,哪个指向后面元素;
- 指针变量可以有空值,即 p=NULL; 其中NULL是一个符号常量,代表整数0,在stdio.h头文件中对NULL进行了定义:#define NULL 0。使p指向地址为0的单元,系统保证该单元不存放有效数据。
【注】:对p赋值为NULL与不对p赋值是两个不同的概念。
前者有值(值为0),后者的值无法预料,所以在引用指针变量签都要对指针变量进行赋值。