函数指针

指向函数的指针包含了函数的地址,可以通过它来调用函数,函数指针与指针函数的最大区别是函数指针的函数名是一个指针

格式:类型说明符 (*函数名)(参数)

void (*sum)();

实例:求两个数中较大值,较小值

int max (int a, int b){return a>b ? a:b;
}int min (int a, int b){return a<b ? a:b;
}
int (*f)(int, int); // 声明函数指针,指向返回值类型为int,有两个参数类型都是int的函数
void main(){f = max; // 函数指针f指向求较大值的函数max  int c = (*f)(1, 2); printf("较大值 %d \n", c); f = min;int d = (*f)(1, 2);printf("较小值 %d \n", d); getchar();}

指针函数
当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用的函数,以用于需要的指针火灾地址的表达式。

格式:类型说明符* 函数名(参数)

int *sum();  int * add(int,int);

实例:

int * add(int a,int b);
void main(){int *p1 = NULL;  printf("address of p1 = %#x \n", p1);  p1 = f(1, 2); printf("address of p1 = %#x \n", p1);  printf(" *p1 = %d\n", *p1);
}
/* * 指针函数的定义 * 返回值是指针类型int * */
int *add(int a, int b) {  int *p = (int *)malloc(sizeof(int));   printf("address of p = 0x%x \n", p); memset(p, 0, sizeof(int));  *p = a + b;  printf("*p = %d \n", *p);  return p;
}  //运行结果:
address of p1 = 0x0
*p = 3
address of p = 0x2d3b08
address of p1 = 0x2d3b08
*p1 = 3

运行结果可以看出,指针函数add的返回值p和add赋值给的指针p1的地址是相同的,都是指向指针函数内部申请的内存地址0x2d3b08。

实例:随机生成一个数组,写出一个函数查询最小值,并且返回最小值的地址,在main函数中打印出来。

int * min(int arr[],int len){int i =0;int *p = arr;for(;p<len;p++){if(arr[i]<*p){p= &arr[i];}}
}void main(){int arr[10];int i =0;//设置随机种子,srand初始化随机数发生器,用时间作为种子srand(unsigned)time(NULL));for(;i<10;i++){//100范围内arr[i] = rand()%100;printf("arr[i]=%d\n",arr[i]);}int *p = min(arr,sizeof(arr)/sizeof(int));printf("p=%#x,*p = %d",p,*p);getchar();
}

[JNI] 开发基础(4)函数指针及指针函数相关推荐

  1. Android Studio1.4.x JNI开发基础 - 简单实例

    接上一篇,搭建好基于Android Studio的环境之后,编写native代码相对来说也比较简单了.在Android上编写Native代码和在Linux编写C/C++代码还是有区别,Native代码 ...

  2. AI应用开发基础傻瓜书系列3-激活函数

    Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...

  3. AI应用开发基础傻瓜书系列3-激活函数和损失函数

    Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...

  4. JNI开发基础知识及编译SO(一)

    前言 本文主要介绍学习JNI从0开始学习过程的记录,包含JNI的定义,使用 以下是本篇文章正文内容 一.JNI是什么?SO是什么? JNI是Java Native Interface的缩写,它提供了若 ...

  5. iOS开发基础篇——介绍C++内置函数

    学习iOS开发,那么就一定要掌握C的部分,今天的内容是C++内置函数的部分,一起来学习一下吧! 调用函数时需要一定的时间和空间的开销,过程如下: 这只是一个参考! C++提供一种提高效率的方法,即在编 ...

  6. Android Studio1.4.x JNI开发基础-基本环境配置

    从Eclipse时代到Android Studio普及,开发工具越来越好用.早些时候还需要安装Cygwin工具,从Android Studio1.3以后,在Android 环境开发JNI程序搭建开发环 ...

  7. 程序开发基础学习四(boost::signal2 函数学习)

    在游戏编程中,新的策划需求总是在迭代不停......,对于游戏程序员肯定深有感触吧,遇到这种情况咱只能小小的抱怨下,活还得干.尤其是遇到耦合到很多类的时候,要是直接实现不加抽象的话,那咱的代码就要被拆 ...

  8. AI应用开发基础傻瓜书系列3-损失函数

    Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...

  9. VTK修炼之道80:VTK开发基础_智能指针与引用计数

    1.引用计数 VTK经过多年的开发与维护,已经形成了一套稳定的框架和开发规则.因此,了解这些规则和框架是定制VTK类的基础,这其中用到了大量面向对象的设计模式,例如对象工程模式.观察者/命令模式:还有 ...

  10. C语言 函数指针和指针函数区别 - C语言零基础入门教程

    目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...

最新文章

  1. 解析自动驾驶算法四大模块的问题与后续发展
  2. python基础语法第10关作业-Python基础语法习题一
  3. [云炬创业基础笔记] 第四章测试4
  4. 《明日方舟》Python版公开招募工具
  5. [ARM]【编译】【实践】 - 浮点编译选项NEON引发的Skia的库Illegal instruction运行错误和解决办法
  6. 【解决】Oracle服务器ip地址被占用
  7. 近世代数--正规子群--群、同态核、同态象的大小关系
  8. Linux 虚拟IP
  9. 不要随意设置随机数种子
  10. GBT 39323-2020 乘用车车道保持辅助(LKA)系统性能要求及试验方法
  11. 《信任的速度》读后感
  12. uni-app H5实现公众号微信授权登入遇到的问题(前端)
  13. python中--snip--是什么意思
  14. css5导弹,世界六大洲际导弹排行榜
  15. java抽奖活动_java抽奖思路
  16. Android R- CarAudioService之registerAudioPolicy动态注册(一)
  17. 说说Android应用的persistent属性
  18. 32位linux升级64位系统下载地址,使用i386-32位Linux不能升级到amd64位,只能全新安装Linux-amd64版...
  19. 横幅广告(2)admob
  20. Google Filament 源码学习(一):Filament 编译

热门文章

  1. 【2018 SWERC - C 】Crosswords【字典树、暴力搜索】
  2. 【Gym - 101234A】Hacker Cups and Balls【线段树 + 二分答案】
  3. 易考防作弊功能有哪些_浙江考试院发公告,上百名考生考研违规,你可以不努力但不能作弊...
  4. 神经网络与深度学习第1章:绪论 阅读提问
  5. Unity 用ml-agents机器学习造个游戏AI吧(1)(Windows环境配置)
  6. Python3 面向对象之:多继承
  7. Android数据结构与算法(一):基础简介
  8. 【知了堂学习笔记】$.ajax配合Servlet实现登录验证
  9. 在Android studio环境下使用junit框架进行单元测试
  10. Android消除Toast延迟显示