C / C ++ 자체 정의 단순지도 매핑, 수렴 기능 감소, 첫 아는 사람 기능 적용

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;
 

요약하자면

프로그래밍을 처음 배울 때 요구 사항을 충족하고 올바른 결과를 출력 할뿐만 아니라 코드의 가독성, 캡슐화 및 견고성을 개선하고 자신의 코드 스타일을 자유롭게 사용할 수있는 방법에 대해 더 많이 생각해야합니다.

추신:
   留作总结,希望各位大神指正。

추천

출처blog.csdn.net/weixin_44290157/article/details/90302192