C语言指针相关解析

匿名 (未验证) 提交于 2019-12-03 00:19:01

在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语言指针相关解析
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!