IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 函数指针与指针函数 -> 正文阅读

[C++知识库]函数指针与指针函数

函数指针

#include <stdio.h>

void printWelcome()
{
	printf("程序启动,欢迎使用\n");
	
}

int changData(int data)
{
	return ++data;
}


int main()
{
	void (*p)();      //定义一个函数指针变量
	p = printWelcome; //指向函数(需相同类型)
	(*p)();           //调用
	
	int (*p2)(int data);
	p2 = changData;
	printf("p2=%d\n",(*p2)(10));
	
	
	return 0;
}

结果

程序启动,欢迎使用
p2=11

应用回调函数

#include <stdio.h>
#include <stdlib.h>

int getMax(int data1,int data2)
{
	return data1>data2?data1:data2;
	
}
int getMin(int data1,int data2)
{
	return data1<data2?data1:data2;
	
}
int addData(int data1,int data2)
{
	return data1+data2;
	
}

int dataHangler(int data1,int data2,int (*pfunc)(int ,int ))
									//int型的函数指针
{
	int ret;
	ret = (*pfunc)(data1,data2);  //函数调用
	
	return ret;
}


int main()
{
	int a=10;
	int b=20;
	int (*pfunc)(int ,int );//形参中强调类型就够了
	int cmd;
	int ret;
	
	printf("请输入1:(a,b中大的值)2:(a,b中小的值)3:(a,b的和)\n");
	scanf("%d",&cmd);
	switch(cmd){
		case 1:
			pfunc=getMax;
		break;
		case 2:
			pfunc=getMin;
		break;
		case 3:
			pfunc=addData;
		break;
		default:
			printf("输入有误!\n");
			exit(-1);
		break;	
	}
	ret =dataHangler(a,b,pfunc);//pfunc指定函数指针,执行1,2,3运算法则
	printf("ret = %d\n",ret);
	return 0;
}

结果

请输入1:(a,b中大的值)2:(a,b中小的值)3:(a,b的和)
1
ret = 20
请输入1:(a,b中大的值)2:(a,b中小的值)3:(a,b的和)
2
ret = 10
请输入1:(a,b中大的值)2:(a,b中小的值)3:(a,b的和)
3
ret = 30

指针函数

指针函数返回指针值的函数
概念
一个函数可以返回一个整型值字符值、实型值等,也可以返回指针型的数据,即地址。其概念与以前类似,只是返回的值的类型是指针类型而已。
例如“int * a(int x,int y);",a是函数名,调用它以后能得到一个int*型(指向整型数据)的指针,即整型数据的地址。x和y是函数a的形参,为整型。
请注意在 * a两侧没有括号,在a的两侧分别为 * 运算符和( )运算符。而( )优先级高于 * ,因此a先与( )结合,显然这是函数形式。这个函数前面有一个 * ,表示此函数是指针型函数(函数值是指针)。最前面的int表示返回的指针指向整型变量。

例:有a个学生 ,每个学生有b门课程的成绩。要求在用户输人学生序号以后,能输出该学生的全部成绩。用指针函数来实现

#include <stdio.h>

int* getPosPerson(int pos,int (*pstu)[4])//函数指针,返回指针的函数
{
	int *p;
	p = (int *)(pstu+pos);//偏移一个数组
	return p;
}


int main()
{
	int scores[3][4]={{77,88,99,10},{55,66,11,22},{44,88,66,11}};
	int pos;
	int *ppos;
	
	printf("请输入你要查看的学生号数:\n");
	scanf("%d",&pos);
	
	ppos = getPosPerson(pos,scores);
	for(int i=0;i<4;i++){
		printf("%d ",*ppos++);
		
	}
	
	return 0;
}

结果

请输入你要查看的学生号数:
0
77 88 99 10
请输入你要查看的学生号数:
1
55 66 11 22
请输入你要查看的学生号数:
2
44 88 66 11
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 01:47:11  更:2022-01-14 01:48:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:53:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码