C / C ++自己定義の単純なマップマッピング、収束関数の削減、最初の知人の関数アプリケーション

C / C ++カスタムシンプルマップマッピング、コンバージェンス機能の削減、最初に知った機能のシンプルなアプリケーション

プログラムアプリケーションの目標

最近、ポインターとポインター関数のアプリケーションに対応するC / C ++言語を学び、新しいタイプのtypedefを宣言したり、関数呼び出しを使用したりしました。

手順要件

マップ関数をカスタマイズするには、追加または減算操作を実行するカスタム操作関数を渡すことができる必要があります。必要に応じて、配列内の各数値を1つのコンテンツに集約できる必要が
あるreduce関数をカスタマイズします。ここでは、式の便宜上1つだけを示します。累積関数: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;
 

総括する

プログラミングを初めて学ぶときは、要件を満たして正しい結果を出力するだけでなく、さらに重要なことに、コードの読みやすさ、カプセル化、堅牢性を向上させ、独自のコードスタイルを自由に使用する方法について考える必要があります。

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

おすすめ

転載: blog.csdn.net/weixin_44290157/article/details/90302192