C / C ++ 사용자 지정 단순지도 매핑, 수렴 기능 감소, 처음 아는 기능의 간단한 적용
프로그램 신청 목표
최근에 포인터와 포인터 함수의 적용에 해당하는 C / C ++ 언어를 배웠으며 새로운 유형의 typedef 를 선언 하거나 함수 호출을 사용했습니다.
절차 요건
지도 기능 을 사용자 정의하려면 사용자 정의 연산 함수를 전달할 수 있어야합니다. 더하기 또는 빼기 연산을 수행합니다. 축소 함수를
사용자 정의하여 필요에 따라 배열의 각 숫자를 하나의 콘텐츠로 집계 할 수 있어야합니다. 여기에는 표현의 편의를 위해 하나만 있습니다. 누적 함수 : addall (int * arr, int n) .
프로그램 예
#include <stdio.h>
#include <malloc.h>
typedef int (*opt)(int,int);//自定义函数指针类型
typedef int (*opt2)(int *, int);
int *map(opt opt1,int *arr,int n,int *temp);//函数声明
int reduce(opt2 opt2,int *arr,int n);
int add(int m,int n);
int sub(int m,int n);
int addall(int *arr,int n);
int main() {
int n;//定义数组长度
printf("please enter arr[number]--number:");
scanf("%d",&n);
int a[n];
int *p=a;
printf("please enter arr[number]--arr[]:");
for(;p<a+n;p++){
scanf("%d",p);
}
p=a;
printf("The original arr[number] is:");
for(;p<a+n;p++){
printf("%3d",*p);
}
printf("\n");
printf("please enter 0-->map or 1-->reduce .");
int x;
scanf("%d",&x);
추가 함수 및 하위 함수 포인터는 선택적 작업을 위한 실제 매개 변수로 맵 함수에 전달할 수 있습니다 . 이러한 방식으로 작성하면 함수가 잘 캡슐화되고 유연하며 필요에 따라 다른 작업을 추가 할 수 있다는 장점이 있습니다.
if(x==0){
int (*temp)(int,int);
printf("please enter 01-->add or 02-->sub");
int y;
scanf("%d",&y);
if(y==01){
printf("arr[number] is changed by using add from map.");
temp=add;
}
if(y==02){
printf("arr[number] is changed by using sub from map.");
temp=sub;
}
int *p0=(int *)malloc(sizeof(int)*n);
int *p2=map(temp,a,n,p0);
for(int i=0;i<n;i++,p2++){
printf("%3d",*p2);
}
printf("\n");
free(p0);
}
if(x==1){
printf("arr[number] is changed by using addall from reduce.");
printf("%3d",reduce(addall,a,n));
printf("\n");
}
return 0;
}
函数部分
int *map(opt opt1,int *arr,int n,int *temp){
int *temp1=temp;
for(int *p=arr;p<arr+n;p++){
*temp1=opt1(*p,1);
*temp1++;
}
return temp;
}
int add(int m,int n){
return m+n;
}
int sub(int m,int n){
return m-n;
}
int reduce(opt2 opt2,int *arr,int n){
return opt2(arr,n);
}
int addall(int *arr,int n){
int all;
for(int *p=arr;p<arr+n;p++){
all+=*p;
}
return all;
요약하자면
프로그래밍을 처음 배울 때 요구 사항을 충족하고 올바른 결과를 출력 할뿐만 아니라 코드의 가독성, 캡슐화 및 견고성을 개선하고 자신의 코드 스타일을 자유롭게 사용할 수있는 방법에 대해 더 많이 생각해야합니다.
추신:
留作总结,希望各位大神指正。