加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

总结函数指针,指针数组,数组指针,函数指针数组

发布时间:2022-09-28 15:53:30 所属栏目:PHP教程 来源:
导读:  函数指针:

  顾名思义这是一个指针,不过指向的是一个函数。

  定义:存储类型 返回值类型 (*指针变量名)(形参列表)

  初始化:

  int (*p)(int x,int y)=func;//func为函数名,x和y
  函数指针:
 
  顾名思义这是一个指针,不过指向的是一个函数。
 
  定义:存储类型 返回值类型 (*指针变量名)(形参列表)
 
  初始化:
 
  int (*p)(int x,int y)=func;//func为函数名,x和y为func函数的形参名
  int (*p)(int x,int y)=&func;//含义上一行相同,不过一般不这么写
  int (*p)(int ,int )=func;//func为函数名
  上述代码解释:p是一个指针php指针,它指向了一个返回值为int 型,有两个int型形参的函数。
 
  赋值:
 
  int (*p)(int x,int y)=func1;//func1为函数名,x和y为func函数的形参名
  p=func2;//func2也是一个函数名
  用途:通过函数指针来间接调用它所指向的函数,在回调函数中经常用到。
 
  指针数组:
 
  顾名思义这是一个数组,不过数组中存放的元素为指针。
 
  定义:存储类型 数据类型 *数组名[数组元素个数]
 
  eg:int *array[10];//定义了一个有10个int *类型的数组。[]的优先级比*优先级高
 
  指针数组在char型中有很多用法。
 
  eg:
 
  char *str[3]={"Hi","Good","Moon"};
  这是什么意思呢,str数组中有三个char *类型的元素。它们分别指向"Hi", "Good", "Moon"这三个字符串。即str[0]是一个指针指向"Hi" 这个字符串的首元素地址。
 
  注意:关注它们的偏移量:str+1 和*str+1这两个偏移量是不同的,str+1指向了str这个数组的首元素的下个元素,即偏移到了str[1]这个元素。而*str+1则是先对str取内容,str这里代表数组首元素的地址(&str[0]),*str便是str[0],str[0]+1指向的是这个指针指向字符串的首元素的之后一个元素。
 
  数组指针:
 
  这是一个指针,它指向的是一个数组。
 
  定义:存储类型 数据类型 (*数组名)[数组元素个数],因为[]的优先级比*高,所以要用()来使*的优先级变高
 
  数组指针很多时候和二维数组搭上关系
 
  eg:
 
  int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
  int (*p)[4]=a;
  先来看p,p是一个指针,指向了一个有4个int类型数据的数组。a是一个二维数组,可以看作a内有三个其内有4个int型元素的数组。便于理解可以认为a[3][4]={a[0],a[1],a[2]};这里仅是便于理解,实际是不能这么写的。这个时候就可以知道int (*p)[4]=a; 的意思了。p指向了a的首元素地址(&a[0]);
 
  来看偏移量:因为p指向的是a的首元素地址,所以p+1指向了a的第二个元素地址(&a[1])。
 
  再看*p+1:*p便得到了a[0],而a[0]是a[0]这个数组的数组名,数组名在这里表示数组首元素地址。所以*p==&a[0][0];那么*p+1便指向了a[0][1]; 这就是偏移量的不同。那么**p是多少呢? **p==1(a[0][0]);
 
  注意:由上可以知道p 和 *p的地址相同的,都是a[0][0]的地址,但是它们含义不同,偏移量是不同的。
 
  函数指针数组
 
  释义:这是一个数组,不过数组中的元素是函数指针
 
  定义:返回值类型 (*数组名[N])(形参列表)
 
  eg:
 
  int (*p[5])(int ,int );
  /*p是一个有5个元素的数组,
  元素是指向返回值为int型,有两个int型形参的指针*/
  可以通过函数指针数组来间接调用函数。上述的调用方式为: p[0](整型数,整型数 )或者*(p[0])(整型数 ,整型数 )。这两种方式都可以。
 
  注意:因为这是一个数组,所以存放在其内的函数指针都是相同类型的,即指针指向的函数都是相同类型的。(相同类型的返回值,相同的形参个数和形参数据类型)。
 

(编辑:PHP编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!