在C语言中除了一级指针和二级指针,还有一些比较常用但又比较拗口的指针类型。
比如:指针数组和数组指针。它们的名称只是前后顺序不一样,却有着千差万别,容我向大家徐徐道来。
先看两种定义:int *p[5], int(*p)[5]。
第一个是指针数组,由于"[ ]"的优先级高于“*”,所以p先和"[ ]"结合,构成了数组,后和"*"结合,成了指针数组。
指针数组依然是数组,只不过它里面存放的是指针。如图:

第二个是数组指针,在加了“()”后,p先与“*”结合,因此成为了数组指针。顾名思义,它是一个指针,指向p[4]数组
的首地址。 继续如图!:

函数指针:例如void(*fun1)( );函数指针是用来存放函数地址的变量,在函数中,函数的地址是入口地址,由函数名来表示。
函数指针比较好理解,因此不会赘言太多。
在函数指针的基础上,介绍一个定义:
函数指针数组,它是一个数组,用来存放一组函数的地址。
函数指针数组的一个简单应用:计算器
int(*p[5])(int x,int y)={0,add,sub,mul,div};其中int(*p)[5]()就是一个函数指针数组,这样调用函数时,特别方便,效率也高。
在函数指针数组的概念下,最后介绍一个顺口溜一般的类型:
函数指针数组的指针。它是一个指针,指向一个数组,数组里面存放函数的地址。 依次拆开,是不是概念就很清晰了。
它一般是这样子定义的:
voidtest(const char* str)
{
printf("%s\n",str);
}
int main()
{
//函数指针pfun
void (*pfun)(const char*)=test;
//函数指针数组pfunArr
void (*pfunArr[5])(const char* str);
pfunArr[0]=test;
//指向函数指针数组pfunArr的指针ppfunArr
void(*(*ppfunArr)[10])(const char*)=&pfunArr;
return 0;
}到此,关于c语言指针的一些引申也就结束,若有见解,欢迎随时指出,不胜荣幸!
本文详细解析了C语言中的一级指针、二级指针,以及指针数组、数组指针、函数指针和函数指针数组的概念。通过实例和图示解释了它们的区别和使用方式,帮助读者理解这些复杂类型的指针。
1922

被折叠的 条评论
为什么被折叠?



