一、指针常量与常量指针
1、指针常量
本质上是一个常量,常量的类型是指针,表示该常量是一个指针类型的常量。在指针常量中,指针本身的值是一个常量,不可以改变,始终指向同一个地址。在定义的时候,必须要初始化。
int a = 10, b = 20;
int *const p = &a;
*p = 30;
p指针指向的地址是不变的,但是其内容可被修改。
2、常量指针
常量指针本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。在常量指针中,指针指向的内容是不可改变的,指针看起来好像是指向了一个常量。
int a = 10, b = 20;
const int *p = &a;
p = &b;
指针可指向其他地址,但是指向的内容不可以改变。
二、指针数组与数组指针
1、数组指针
首先本质上是一个指针;指针指向数组;
定义方式:
存储类型(可省) + 数据类型(*指针名)[下标] = 值;
如 int (*p)[3];
存储类型:auto、static、extern
2、指针数组
首先是个数组;
定义方式:[存储类型] + [数据类型] * 数组名[长度];
如:
int *arr[3];
指针数组的含义是:数组中每个元素都是指针。
三、函数指针和指针函数
1、指针函数
定义方式:返回值 * 函数名(形参)
如 int *fun(int);
2、函数指针
本质是一个指针,只不过指针指向函数
类型:(*指针名) [形参名]
如 int (*p)(int);
表示一个指针指向函数
int add(int a, int b)
{
return (a+b);
}
int main()
{
int (*p)(int, int);
p = add;
ret = p(1, 2);
printf("%d\n", ret); // ret = 1+2 = 3;
}