一、空指针是一种特殊的指针 一个指针变量指向空指针,表示该指针处于空闲状态下,不指向任何地址
P=NULL;表示指针变量P指向空指针;
同时任何不用的指针都必须指向空指针,避免野指针的出现。
二、通用指针可以指向任何数据类型,也称void指针,可以把任何类型的指针变量赋给void指针;
int *PA;
void *PB;
PB=(void*)PA;
同样,也可以把void指针赋给任何类型的指针变量,如果通用指针类型与被赋值指针的数据类型不一致时,要进行强制类型转换。
int *PA;
void *PB;
PA=(int*)PB;
测试 用变量a给出下面的定义
1、一个整型数;int a;
2、一个指向整型数的指针;int *a;
3、一个指向指针的的指针,它指向的指针是指向一个整型数 int **a;
4、一个有10个整型数的数组 int a[10]
5、一个有10个指针的数组,这些指针是指向整型数的 int *a[10]
6、一个指向有10个整型数数组的指针 int (*a)[10]
7、一个指向函数的指针,该函数有一个整型参数并返回一个整型数int(*a)(int)
注意区别
int*fun(char*);//这是一个返回值是整型指针的fun()函数
int (*fun)(char*);//这才是一个函数指针,能够指向返回值是int型,有一个char*参数的函数。
函数指针使用:
例子:
Int ptr; int fn(int); int(*Fp)(int);
指出下面是否合法?
Fp = fn;//正确 可以把一个函数地址赋给一个函数指针(函数名就代表函数地址类似于数组名代表数组地址)
Fp = fn(5);//错误 不能够把函数调用赋给函数指针
Fp = &ptr;//错误,不能把非函数地址赋给函数指针(ptr的地址不在代码区)
例子:
Int ptr; int fn(int); int(*Fp)(int);
指出下面是否合法?
Fp = fn;//正确 可以把一个函数地址赋给一个函数指针(函数名就代表函数地址类似于数组名代表数组地址)
Fp = fn(5);//错误 不能够把函数调用赋给函数指针
Fp = &ptr;//错误,不能把非函数地址赋给函数指针(ptr的地址不在代码区)