函数指针

// 晚上作业(函数指针).cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "string.h"
#include "time.h"
#include "stdlib.h"
//更改数组函数
void modify_array(int arr[],int index){
	arr[index] = 0;
}
//接收并判断是否需要回调
void str(int array[],int num,void(*p)(int a[],int index)){
	for (int i = 0; i < num; i++){
		if (array[i] % 3 == 0){
			p(array,i);
		}
	}
	printf("更改后的数组是:\n");
	for (int i = 0; i < num; i++){
		printf("%d ",array[i]);
	}
	printf("\n\n");
}
//打印数组
void printArray(int arr[],int count){
	for (int i = 0; i < count; i++){
		printf("%d ",arr[i]);
	}
	printf("\n");
}
//交换 A 和 B
void modifyAorB(int a[],int b[],int index){
	int temp = a[index];
	a[index] = b[index];
	b[index] = temp;
}
//接收 A 和 B ,判断什么时候回调
void AorB(int a[],int b[],int count,void(*p)(int a[],int b[],int index)){
	for (int i = 0; i < count; i++){
		if (a[i] > b[i]){
			p(a,b,i);
		}
	}
	printf("\n交换之后 A 是 :\n");
	printArray(a,10);
	printf("交换之后 B 是 :\n");
	printArray(b,10);
}
int _tmain(int argc, _TCHAR* argv[])
{
	// 1.(***)随机生成一个10个元素的数组,找到3的倍数,并将其值修改成0.(注意:修改数值使用回掉函数处理)
	srand(time(0));//种子
	printf("随机产生的十个数是 :\n");

	int array[10] = {0};
	for (int i = 0; i < 10; i++){
		array[i] = rand()%101;
		printf("%d ",array[i]);
	}
	printf("\n");
	void (*p)(int a[],int index) = modify_array;
	str(array,10,p);



	// 2. (***)有两个10个元素的数组,分别为A和B,编程实现相同位置的元素,如果B的元素小于A的元素进行数值交换:(使用回调函数实现)

	int a[10] = {2,3,4,5,6,7,8,9,0,1};
	int b[10] = {1,2,3,4,5,6,7,8,9,0};

	printf("A中的元素是:\n");
	printArray(a,10);
	printf("B中的元素是:\n");
	printArray(b,10);

	void (*pp)(int a[],int b[],int index) = modifyAorB;//函数指针
	AorB(a,b,10,pp);



	getchar();
	return 0;
}


/返回函数指针

// 返回函数指针.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "string.h"
typedef int (*PFUN)(int,int);  //定义 整形的函数指针
struct  nameFunctionPoiter{
	char name[30];
	PFUN fun;
};
int maxValue(int a,int b){
	return a > b ? a: b;
}
int minValue(int a,int b){
	return a > b ? b: a;
}
int avgValue(int a,int b){
	return (a+b)/2;
}

nameFunctionPoiter functionlist[3] = {{"max",maxValue},{"min",minValue},{"avg",avgValue}};

PFUN getFunctionByName(char *funname){
	for (int i = 0; i < 3; i++){
		if (strcmp(funname,functionlist[i].name) == 0){
			return functionlist[i].fun;
		}
	}
}
int _tmain(int argc, _TCHAR* argv[])
{

	PFUN p = getFunctionByName("avg");
	printf("value = %d ",p(3,5));


	getchar();
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值