函数指针的一个例子以及*p和p[0]的关系

来源:互联网 发布:淘宝中小卖家名单 编辑:程序博客网 时间:2024/06/08 15:02

先说几个概念:
p[0]就是*p 就是p所指向的内存中的值

&p是p这个指针本身的地址,&p的类型是int**

&p[0]就是p[0]的地址,也就是p

(&p)[0],就是*(&p),也是p

*p,就是前面说的p[0]

p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用%p来输出的话,它将是一个16进制数。

*p表示此指针指向的内存地址中存放的内容,一般是一个和指针类型一致的变量或者常量。

&是取地址运算符,&p就是取指针p的地址

int fun1(void){  printf("fun1\n" );  return 1;}int fun2(void){  printf("fun2\n" );  return 1;}int fun3(void){  printf("fun3\n" );  return 1;}typedef int (* pf)(void);int main(int argc, char const *argv[]){  int i;  const pf array[] = {fun1,fun2,fun3};  //函数指针数组(只读)  const pf *p;      //指向函数指针的指针(*p只读)  //等价于p=array,array和&array[0]作为右值时,都是表示数组首元素的首地址。  p = &array[0];    //把第一个元素的地址赋给p  i = sizeof(array)/sizeof(array[0]);    //获取数组元素个数  for (; i; i--,p++)  {    if (p[0])   //p[0]就是*p,就是指针p指向的内存中的值    {      printf("%d\n", (int)p[0]);      (*p[0])();    //通过函数指针调用函数    }  }  return 0;}
原创粉丝点击