C语言高级操作(一)——指针数组 && 数组指针 && 常量指针 && 指针常量 && 函数指针 && 指针函数问题

一、指针常量与常量指针

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44463519/article/details/129438599