函数指针,函数指针数组,函数返回值为函数指针
#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
函数指针,函数指针数组,函数返回值为函数指针相关推荐
- 函数返回值为 const 指针、const 引用
函数返回值为 const 指针,可以使得外部在得到这个指针后,不能修改其指向的内容.返回值为 const 引用同理. class CString {private:char* str; public: ...
- golang 函数一 (定义、参数、返回值)
对于GoLang函数的定义或者说理解: 函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你 ...
- scanf函数和回车、空格 及其返回值
scanf和回车的关系: 先看一个我们经常使用的代码: char c; scanf("%c", &c); scanf 的各种格式中,%d.%c.%s三种最常用,通常都是以回 ...
- 一木.溪桥学Python-09:函数的返回值、函数的作用域、作用域的优先级、递归函数、内置文件中常用方法、匿名函数lambda、高阶函数
一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-09:函数的返回值.作用域.作用域的优先级.递归函数.内置文件中常用方法.匿名 ...
- 【C 语言】C 项目开发代码规范 ( 形参合法性判断 | 函数返回值局部变量 | 函数中不用全局变量 | 函数中使用局部变量接收形参 | 函数返回值 | 形参作返回值 | 形参返回值处理 )
文章目录 一.C 项目开发代码规范 一.C 项目开发代码规范 上一篇博客 [C 语言]字符串模型 ( 键值对模型 ) 中 , 完成了字符串的 键值对 查找功能 , 代码不太规范 ; C 项目开发代码规 ...
- Python基础day05【函数(局部变量、全局变量、多函数执行流程、函数返回值、函数参数)、拆包、引用、可变与不可变类型、函数注意事项】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day05[函数(函数传参的两种形式.函数形参).拆包.引用.可变与不可变类型.引 ...
- keil5函数 默认返回值_C++ 函数的定义
" C++对于函数的基本用法" 01 - 函数的定义 //函数声明:[返回值类型] [函数名称] (参数列表)int Function(int a, int b);//函数定义in ...
- php 函数返回值mixed,认识函数的类型、参数与返回值
函数的类型.参数与返回值 一.函数的基本语法语法 functionfunctionName(类型限定参数列表):返回值类型 { } 案例:计算两个数之和. functionsum(int$a,int$ ...
- android 调用js怎么获取返回值_js 函数
函数是一个特殊的对象 具名函数 function 函数名(形式参数1,形式参数2){ 语句 return 返回值 } 匿名函数 上门的具名函数,去掉函数名就是匿名函数 let a =function( ...
最新文章
- 3D特效师可以下班了丨Science
- tcl中的string trim使用时需要注意substring是一个集合
- [编译原理学习]词法分析
- npm install -g -S -D的区别及应用场景
- 影之刃3服务器维护,影之刃3手游2021年3月11日维护公告_影之刃3手游2021年3月11日更新了什么_玩游戏网...
- 三星gtn8010安卓7_三星Galaxy Note 10.1 N8010 最后的救赎 Andorid 5.0.2 ROM
- wcf会话、实例化、并发
- 【Python3网络爬虫开发实战】1.3.3-pyquery的安装
- mysql 注入 update_利用insert,update和delete注入获取数据_MySQL
- 二叉树的前序中序后序 递归与非递归解法
- 反编译获取任何微信小程序源码——看这篇就够了
- 智慧新泰时空大数据与云平台_智慧城市时空大数据与云平台建设技术大纲即将出台...
- 如何使用 RootFS 功能删除 Odyssey 越狱
- Zipf,Power-laws,Pareto分布
- MES系统供应商评估报告-- Gartner出品
- 吃货在东京 -- 记那段吃不饱的日子 之一 牛头自助烤肉店
- mysql既有整数又有小树字段类型,事业单位招考计算机专业知识试题
- 【Git】从本地上传到github的文章显示图片的方法
- 一键加速索尼相机SD卡文件的复制操作,文件操作批处理教程
- X86加装PCIE网卡无法访问ESXi的问题
热门文章
- 相分离相关文章阅读Liquid–liquid phase separation in cellular signaling systems
- myelicpse无法连接mysql_myeclipse连接不到mysql
- MapReduce框架下的FP Growth算法详解
- jsapi支付签名_小程序开发之微信支付
- protobuf string类型_Protobuf 语言指南(proto3)
- 系统学习深度学习(四十)--基于模拟的搜索与蒙特卡罗树搜索(MCTS)
- 人脸对齐(九)--SDM算法
- windows 远程连接mongo_MongoDB 在windows服务器安装部署与远程访问配置
- linux麒麟 ftp,麒麟 vsftp 搭建
- yarn 内存与CPU参数设置