函数的名字就是函数的首地址:定义函数指针;

int (*p)(int )    
p为函数指针变量名字,int 为函数的返回值类型为int型;(int)为函数的形参类型为int型,
注:因为优先级所以要用(*p),否则就会p先和后面的()结合为int*p(int),意思就变为p(int)函数的返回值为int* 
注:main2()函数中   int (*p[])(int ,int )  为一维数组,下面写错了,

#include<stdio.h>
#include<stdlib.h>
int add(int a, int b)
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int multiplition(int a, int b)
{return a*b;
}
int dive(int a, int b)
{return a / b;
}void main1()
{int(*p(int, int))(int, int);//p(int,int)函数的返回值类型为int(*)(int ,int)(函数指针类型)
system("pause");
}
void main2()
{int a = 10; int b = 20;//定义一个二维函数指针数组int(*p[])(int, int) = { add, sub, multiplition, dive };//【】内可以写数组 的长度,也可以不写,和普通数组一样的//用函数指针掉用函数printf("%d", p[1](a, b));//通过遍历函数指针调用函数和遍历数组一样的for (int i = 0; i < 4; i++){printf("%3d", p[i](a, b));}//因为*(p+i)和p[i]是等价的所以:for (int(**ps)(int, int) = p; ps < p + 6; ps++){printf("%3d", (*ps)(a, b));}//int(*p)(int ,int )//int (*p[])(int ,int)//int(**p)(int ,int )
    system("pause");
}
void main33()
{//int a[3]={1,2,3}//int (*p[])(int,int)={add, sub, multiplition, dive }//a和p都是常量,所以不能a=a,p=p//int *pa=(int[]){1,2,3};这是在栈上开辟内存//int(**pt)(int ,int)二级函数指针,存储函数指针数组名//函数指针数组类型为int(*[])(int,int)int(**pp)(int, int) = (int(*[])(int, int)){ add, sub, multiplition, dive };for (int i = 0; i < 4; i++){//这两种方法是printf("%3d", pp[i](100, 10));//printf("%d\n", (*(pp + i))(100, 10));
    }system("pause");}void main44()
{//在堆上开辟内存int(**pp)(int, int) = malloc(4 * sizeof(int(*)(int, int)));//对每个数组元素分别赋值;*pp = add;*(pp + 1) = sub;*(pp + 2) = multiplition;*(pp + 3) = dive;//分别调用for (int i = 0; i < 4; i++){printf("%3d", (*(pp + i))(100,20));}system("pause");
}
//普通指针,数组 和 函数指针,函数指针数组//int *p         int (*p)(int ,int )
//int*p[4]        int (*p[])(int ,int )
//int **p          int (**p)(int ,int)//typedef 简化书写
//先定义变量, 类型+变量名
//typedef 类型+变量名
//变量名就是类型的别名//  int X;
typedef int X;// int Y[10];
typedef int Y[10];//int(*Z)(int, int);
typedef int(*Z)(int, int);//int(*W[])(int, int);
typedef  int(*W[])(int, int);
//int (**PP)(int ,int )
typedef int(**PP)(int, int);void main55()
{X x1;Y y1;Z z1;W w1 = { add, sub, };PP pp1 = (W){ add, sub };printf("%3d", sizeof(w1));system("pause");
}
//int (** x(    int (*z)(int ,int),int,double    )       )(int);// x(    int (*z)(int ,int),int,double    )//x()函数的形参为int (*z)(int ,int),int,double // int (*z)(int ,int)为函数指针 //int (**                  )(int)   是函数返回值类型//x的返回值二级函数指针,参数,有一个函数指针,int,double,
//x是一个函数
//z函数指针//int  (*p)[5];//指向数组的指针
//int *p[5];//数组,每一个元素是一个指针//int( *p[5])(int, int);//函数指针数组
//int( (*(p))[5])(int, int);//指针指向函数指针数组void  main()
{int(*p[5])(int, int);int(*(*p)[5])(int, int);//指向 函数指针数组的指针,//*p为一个指针,int(*[5])(int, int)为函数指针数组就好理解了,
system("pause");
}

转载于:https://www.cnblogs.com/cocos2d-c/p/4452309.html

函数指针,函数指针数组,函数返回值为函数指针相关推荐

  1. 函数返回值为 const 指针、const 引用

    函数返回值为 const 指针,可以使得外部在得到这个指针后,不能修改其指向的内容.返回值为 const 引用同理. class CString {private:char* str; public: ...

  2. golang 函数一 (定义、参数、返回值)

    对于GoLang函数的定义或者说理解: 函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你 ...

  3. scanf函数和回车、空格 及其返回值

    scanf和回车的关系: 先看一个我们经常使用的代码: char c; scanf("%c", &c); scanf 的各种格式中,%d.%c.%s三种最常用,通常都是以回 ...

  4. 一木.溪桥学Python-09:函数的返回值、函数的作用域、作用域的优先级、递归函数、内置文件中常用方法、匿名函数lambda、高阶函数

    一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-09:函数的返回值.作用域.作用域的优先级.递归函数.内置文件中常用方法.匿名 ...

  5. 【C 语言】C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )

    文章目录 一.C 项目开发代码规范 一.C 项目开发代码规范 上一篇博客 [C 语言]字符串模型 ( 键值对模型 ) 中 , 完成了字符串的 键值对 查找功能 , 代码不太规范 ; C 项目开发代码规 ...

  6. Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...

  7. keil5函数 默认返回值_C++ 函数的定义

    " C++对于函数的基本用法" 01 - 函数的定义 //函数声明:[返回值类型] [函数名称] (参数列表)int Function(int a, int b);//函数定义in ...

  8. php 函数返回值mixed,认识函数的类型、参数与返回值

    函数的类型.参数与返回值 一.函数的基本语法语法 functionfunctionName(类型限定参数列表):返回值类型 { } 案例:计算两个数之和. functionsum(int$a,int$ ...

  9. android 调用js怎么获取返回值_js 函数

    函数是一个特殊的对象 具名函数 function 函数名(形式参数1,形式参数2){ 语句 return 返回值 } 匿名函数 上门的具名函数,去掉函数名就是匿名函数 let a =function( ...

最新文章

  1. 3D特效师可以下班了丨Science
  2. tcl中的string trim使用时需要注意substring是一个集合
  3. [编译原理学习]词法分析
  4. npm install -g -S -D的区别及应用场景
  5. 影之刃3服务器维护,影之刃3手游2021年3月11日维护公告_影之刃3手游2021年3月11日更新了什么_玩游戏网...
  6. 三星gtn8010安卓7_三星Galaxy Note 10.1 N8010 最后的救赎 Andorid 5.0.2 ROM
  7. wcf会话、实例化、并发
  8. 【Python3网络爬虫开发实战】1.3.3-pyquery的安装
  9. mysql 注入 update_利用insert,update和delete注入获取数据_MySQL
  10. 二叉树的前序中序后序 递归与非递归解法
  11. 反编译获取任何微信小程序源码——看这篇就够了
  12. 智慧新泰时空大数据与云平台_智慧城市时空大数据与云平台建设技术大纲即将出台...
  13. 如何使用 RootFS 功能删除 Odyssey 越狱
  14. Zipf,Power-laws,Pareto分布
  15. MES系统供应商评估报告-- Gartner出品
  16. 吃货在东京 -- 记那段吃不饱的日子 之一 牛头自助烤肉店
  17. mysql既有整数又有小树字段类型,事业单位招考计算机专业知识试题
  18. 【Git】从本地上传到github的文章显示图片的方法
  19. 一键加速索尼相机SD卡文件的复制操作,文件操作批处理教程
  20. X86加装PCIE网卡无法访问ESXi的问题

热门文章

  1. 相分离相关文章阅读Liquid–liquid phase separation in cellular signaling systems
  2. myelicpse无法连接mysql_myeclipse连接不到mysql
  3. MapReduce框架下的FP Growth算法详解
  4. jsapi支付签名_小程序开发之微信支付
  5. protobuf string类型_Protobuf 语言指南(proto3)
  6. 系统学习深度学习(四十)--基于模拟的搜索与蒙特卡罗树搜索(MCTS)
  7. 人脸对齐(九)--SDM算法
  8. windows 远程连接mongo_MongoDB 在windows服务器安装部署与远程访问配置
  9. linux麒麟 ftp,麒麟 vsftp 搭建
  10. yarn 内存与CPU参数设置