// 晚上作业(函数指针).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;
}