C语言 回调函数 produce(arr,len,getRand)

Posted DQ_CODING

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 回调函数 produce(arr,len,getRand)相关的知识,希望对你有一定的参考价值。

基本介绍

回调函数:形参中包含另一个函数的函数指针
用函数指针接收另一个函数

案例

代码解析

具体代码

#include<stdio.h>
#include<stdlib.h>
//回调函数--

//函数原型
int getRand();
int *produce(int*arr,int len,int(*get)());
int main()
{
	int arr[10];
	int len=sizeof(arr)/sizeof(int);
	int i;
	//result=arr=&arr[0]
	int*result=produce(arr,len,getRand);//getRand传入函数名,函数名是函数的首地址

	//打印数组
	for(i=0;i<len;i++)
	{
		
		//result是数组的首地址
		//+i移动指针
		printf("arr[%d]=%d address=%p self-address=%p\\n",i,*result+i,result+i,&result);
		
	}
	
	getchar();
	return 0;
}
//获取0-9的随机数
int getRand()
{
	return rand()%10;//0--99
}
//将随机数赋值给数组
int *produce(int*arr,int len,int(*get)())
{
	int i;
	for(i=0;i<len;i++)
	{
		//arr[i]=(*get)();
		arr[i]=get();
	}
	return arr;
}

练习–统计字符串英文个数

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//回调函数--统计字符串中的英文个数

//函数原型
int add(int n);
int count(char* s,int len,int(*padd)(int));

int main()
{
	//不能使用char *s=""; 这里是字符串常量,不能改变
	char s[100];
	printf("please input s:\\n");
	gets(s);//获取输入的字符串
	int len=strlen(s);
	int sum=count(s,len,add);//add传递函数名(地址)
	printf("the sum is %d\\n",sum);
	getchar();//enter
	getchar();
	return 0;
}
//数量自增
int add(int n)
{
	return ++n;
}
//统计字符串中英文个数
int count(char* s,int len,int(*padd)(int))
{
	int i;
	int count=0;
	for(i=0;i<len;i++)
	{
		if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
		{
			count=padd(count);
		}
	}
	return count;
}


以上是关于C语言 回调函数 produce(arr,len,getRand)的主要内容,如果未能解决你的问题,请参考以下文章

C语言练习题(持续更新)

C语言练习题(持续更新)

怎么用c语言计算平均数

排序算法

C语言之插入排序法

C语言的回调函数