[JNI] 开发基础(4)函数指针及指针函数
函数指针
指向函数的指针包含了函数的地址,可以通过它来调用函数,函数指针与指针函数的最大区别是函数指针的函数名是一个指针
格式:类型说明符 (*函数名)(参数)
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)函数指针及指针函数相关推荐
- Android Studio1.4.x JNI开发基础 - 简单实例
接上一篇,搭建好基于Android Studio的环境之后,编写native代码相对来说也比较简单了.在Android上编写Native代码和在Linux编写C/C++代码还是有区别,Native代码 ...
- AI应用开发基础傻瓜书系列3-激活函数
Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...
- AI应用开发基础傻瓜书系列3-激活函数和损失函数
Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...
- JNI开发基础知识及编译SO(一)
前言 本文主要介绍学习JNI从0开始学习过程的记录,包含JNI的定义,使用 以下是本篇文章正文内容 一.JNI是什么?SO是什么? JNI是Java Native Interface的缩写,它提供了若 ...
- iOS开发基础篇——介绍C++内置函数
学习iOS开发,那么就一定要掌握C的部分,今天的内容是C++内置函数的部分,一起来学习一下吧! 调用函数时需要一定的时间和空间的开销,过程如下: 这只是一个参考! C++提供一种提高效率的方法,即在编 ...
- Android Studio1.4.x JNI开发基础-基本环境配置
从Eclipse时代到Android Studio普及,开发工具越来越好用.早些时候还需要安装Cygwin工具,从Android Studio1.3以后,在Android 环境开发JNI程序搭建开发环 ...
- 程序开发基础学习四(boost::signal2 函数学习)
在游戏编程中,新的策划需求总是在迭代不停......,对于游戏程序员肯定深有感触吧,遇到这种情况咱只能小小的抱怨下,活还得干.尤其是遇到耦合到很多类的时候,要是直接实现不加抽象的话,那咱的代码就要被拆 ...
- AI应用开发基础傻瓜书系列3-损失函数
Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源,请见微软人工智能教育与学习共建社 ...
- VTK修炼之道80:VTK开发基础_智能指针与引用计数
1.引用计数 VTK经过多年的开发与维护,已经形成了一套稳定的框架和开发规则.因此,了解这些规则和框架是定制VTK类的基础,这其中用到了大量面向对象的设计模式,例如对象工程模式.观察者/命令模式:还有 ...
- C语言 函数指针和指针函数区别 - C语言零基础入门教程
目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...
最新文章
- 解析自动驾驶算法四大模块的问题与后续发展
- python基础语法第10关作业-Python基础语法习题一
- [云炬创业基础笔记] 第四章测试4
- 《明日方舟》Python版公开招募工具
- [ARM]【编译】【实践】 - 浮点编译选项NEON引发的Skia的库Illegal instruction运行错误和解决办法
- 【解决】Oracle服务器ip地址被占用
- 近世代数--正规子群--群、同态核、同态象的大小关系
- Linux 虚拟IP
- 不要随意设置随机数种子
- GBT 39323-2020 乘用车车道保持辅助(LKA)系统性能要求及试验方法
- 《信任的速度》读后感
- uni-app H5实现公众号微信授权登入遇到的问题(前端)
- python中--snip--是什么意思
- css5导弹,世界六大洲际导弹排行榜
- java抽奖活动_java抽奖思路
- Android R- CarAudioService之registerAudioPolicy动态注册(一)
- 说说Android应用的persistent属性
- 32位linux升级64位系统下载地址,使用i386-32位Linux不能升级到amd64位,只能全新安装Linux-amd64版...
- 横幅广告(2)admob
- Google Filament 源码学习(一):Filament 编译
热门文章
- 【2018 SWERC - C 】Crosswords【字典树、暴力搜索】
- 【Gym - 101234A】Hacker Cups and Balls【线段树 + 二分答案】
- 易考防作弊功能有哪些_浙江考试院发公告,上百名考生考研违规,你可以不努力但不能作弊...
- 神经网络与深度学习第1章:绪论 阅读提问
- Unity 用ml-agents机器学习造个游戏AI吧(1)(Windows环境配置)
- Python3 面向对象之:多继承
- Android数据结构与算法(一):基础简介
- 【知了堂学习笔记】$.ajax配合Servlet实现登录验证
- 在Android studio环境下使用junit框架进行单元测试
- Android消除Toast延迟显示