close

純參考喔^^加油

[root@walter yahoo-code]# cat test0616.c
#include <stdio.h>
#include <stdlib.h>

/*****************************************************************************/

#define ShareFun \
        for (i = 0;i < 3; i++) { \
            arr3[i] = Fun(arr1[i], arr2[i]); \
        }

/*****************************************************************************/

int (*Fun)(int num1, int num2);

int AddFun(int num1, int num2)
{ int num3 = num1 + num2; return num3; }

int SubFun(int num1, int num2)
{ int num3 = num1 - num2; return num3; }

int TimeFun(int num1, int num2)
{ int num3 = num1 * num2; return num3; }

int PriArr(int *arr, int length)
{    
    int i;
    for (i = 0;i < length; i++) {
        printf("arr3[%d] = %2d ", i, arr[i]);
    }
    printf("\n=======================================\n");
}
int main ()
{
    int i;
    int arr1[3] = {1, 2, 3};
    int arr2[3] = {3, 2, 1};
    int arr3[3] = {0, 0, 0};

    /* Call Add Fun    */
    printf("Call Add Fun:\n");
    Fun = AddFun;
    ShareFun
    PriArr(arr3, sizeof(arr3)/sizeof(arr3[0]));
    
    /* Call Sub Fun    */
    printf("Call Sub Fun:\n");
    Fun = SubFun;
    ShareFun
    PriArr(arr3, sizeof(arr3)/sizeof(arr3[0]));
    
    /* Call Time Fun */
    printf("Call Time Fun:\n");
    Fun = TimeFun;
    ShareFun
    PriArr(arr3, sizeof(arr3)/sizeof(arr3[0]));
    
    return 0;
}

執行結果如下:

[root@walter yahoo-code]# gcc test0616.c
[root@walter yahoo-code]# ./a.out
Call Add Fun:
arr3[0] =  4 arr3[1] =  4 arr3[2] =  4
=======================================
Call Sub Fun:
arr3[0] = -2 arr3[1] =  0 arr3[2] =  2
=======================================
Call Time Fun:
arr3[0] =  3 arr3[1] =  4 arr3[2] =  3
=======================================

======================================================

#! /usr/bin/perl -w

my @arr1 = (1, 2, 3);
my @arr2 = (3, 2, 1);
my @arr3 = (0, 0, 0);
my $refFun;

sub Add() {
        $arg = \@_;
        my $z = $arg->[2];
        $arr3[$z] = $arg->[0] + $arg->[1];
}

sub Sub() {
        $arg = \@_;
        my $z = $arg->[2];
        $arr3[$z] = $arg->[0] - $arg->[1];
}

sub Time() {
        $arg = \@_;
        my $z = $arg->[2];
        $arr3[$z] = $arg->[0] * $arg->[1];
}

sub shareFun() {
        $i = 0;
        for ($j = 0; $j <= $#arr1; $j++) {
                &$refFun($arr1[$j], $arr2[$j], $j);
        }
        while ($i <= $#arr3) {
                print "$arr3[$i++] ";
        }
        print "\n";
}

print "Before call any Fun:\n";

print "Arr1 = " . qq(@arr1) . "\n";
print "Arr2 = " . qq(@arr2) . "\n";
print "Arr3 = " . qq(@arr3) . "\n";

print "Call Add Fun:\n";
$refFun = \&Add;
&shareFun();

print "Call Sub Fun:\n";
$refFun = \&Sub;
&shareFun();

print "Call Time Fun:\n";
$refFun = \&Time;
&shareFun();

============================

執行結果如下:

Before call any Fun:
Arr1 = 1 2 3
Arr2 = 3 2 1
Arr3 = 0 0 0
Call Add Fun:
4 4 4
Call Sub Fun:
-2 0 2
Call Time Fun:
3 4 3

arrow
arrow
    全站熱搜

    Walter Blyss 發表在 痞客邦 留言(0) 人氣()