Hello,大家好!上一章我们总结了二级指针、指针数组、还有一些由于程序猿的操作不当导致的野指针和悬空指针,这一期我们来介绍一些其他的指针。
数组指针
听名字,数组指针?那它是数组还是指针呢?了解的小伙伴都知道上一章我们说指针数组是数组,那这个数组指针就是指针呗,没错!数组指针就是指针,它是一个指向数组的指针。
先看优先级()> [ ] > *,所以如下图:(【注】:必须要确保 * 优先与p结合)
//p1是数组,数组的10个元素,每个元素的类型为int*,p1是指针数组
int* p1[10];
//p2是指针,指针指向的是数组,数组中10个元素的类型是int,p2是指针
int (*p2)[10];
p2是指针变量名,它存放着数组的地址;而p1只是一个数组名。
字符指针
char* pc="abcd";//这里的pc就是字符指针,但是并没有吧abcd\0存放在pc中,而是首字符的地址
printf("%c\n",*pc);//a
printf("%c\n",pc[0]);//这里输出的结果也是a
printf("%c\n",*pc);//a
printf("%s\n",pc);//abcd
这里的pc中存放的是字符串“abcd”的首元素地址,所以pc就可以说是字符指针,类型是char*;而代码的最后一行,可以通过首元素的地址访问并打印整个字符串的内容。
函数指针
前面我们了解了数组指针、字符指针...,那函数指针就是一个指向函数的指针,它可以用来存储和调用函数的地址,具体是怎么操作的呢,我们来看一组代码:
#include <stdio.h>
int max(int x, int y)
{
return x > y ? x : y;
}
int main(void)
{
// p 是函数指针,&可以省略
int (*p)(int, int) = &max;
int a, b, d;
printf("请输入两个数字:");
scanf("%d %d&#