Language/C C언어 강좌 (배열과 포인터/함수 포인터)
  • 728x90
    반응형

     

     

     

    C언어 Chapter 21.


     

     

    다차원 배열 과 포인터의 관계

    • 포인터는 1차원 배열은 가르킬 수 있지만, 다차원 배열은 가르킬수 없다.

     

    🔔 예)

     

     

    🎯 프로그램 설명

    • 3차원 배열을 포인터 p(1차원) 로 출력한경우

     

    결과 : warning 메시지는 뜨지만 1을 출력 한다. 하지만, *(p+1) 을 해보면 포인터 p는 1차원 이동만하는 것을 알수있다.

     

     

    🔔 예) 포인터는 함수 인자로 사용하면 3차원배열을 이동 증명

     

    🎯 프로그램 설명

    • p는 1차원 이동이라 p + 12 일때 77자리의 주소가 BFFFF998 이다.
    • 함수 인자로 사용한 p3 는 p + 1 일때 BFFF998에 포인터크기와 동일한 4Byte이다.
    • 즉 함수 인자로 사용하면 포인터로 3차원배열을 가리킬수있다.

     

    결과 : mian 함수의 포인터 p는 1차원적 이동이 있고, 함수 인수로서로 p3은 포인터 형태로 3차원 이동이 가능하다.

     

     

     

    함수 포인터의 배열

    • 반환자료형 (*배열이름 [배열크기])(인수리스트)

    int (*test [5])(int, int);

     

    • 함수 포인터 배열의 선언 형태는 위와 같다.

     

    🔔 예) 함수 포인터 배열을 이용하여 사칙연산 수행 프로그램

    ====================================================
    #include <stdio.h>
    #include<process.h>
    int get_operator();
    int plus (int, int);
    int minus (int, int);
    int multiply (int, int);
    int divide (int, int);
       
    int get_operator()
    {
        int choice;
          
        while(1)
        {
            printf("==============================\n");
            printf("0 : for plus\n");
            printf("1 : for minus\n");
            printf("2 : for multiply\n");
            printf("3 : for divide\n");
            printf("4 : for quit\n");
            printf("==============================\n");
            printf("Please Enter operator: ");
            scanf("%d", &choice);
            if((choice >= 0)&&(choice <= 4))
            {
                return (choice);
            }
            else printf("Wrong Input, enter again!\n");
        }
    }
    int main()
    {
        int op;
        int num1;
        int num2;
        int result;
        int(*hanlde[4])(int, int) = {plus, minus, multiply, divide};
        while(1)
        {
            op = get_operator();
            if(op == 4)
            {
                printf("This is the end of program!\n");
                exit(0);
            }
        printf("Enter the frist operand : ");
        scanf("%d", &num1);
        printf("Enter the second operand : ");
        scanf("%d", &num2);
        result = hanlde[op](num1, num2);
        printf("\nthe result of operation is %d\n\n", result);
        }
        return 0;
    }
    int plus(int n1, int n2)
    {
        return (n1 + n2);
    }
    int minus(int n1, int n2)
    {
        return (n1 - n2);
    }
    int multiply(int n1, int n2)
    {
        return (n1 * n2);
    }
    int divide(int n1, int n2)
    {
        return (n1 / n2);
    }
       
    ====================================================

     

    🎯 프로그램 설명

    •   네 개의 원소를 가진 함수 포인터의 배열을 선언하고 초기화하는 부분

    int (*hanlde[4])(int, int) = {plus, minus, nultiply, divide};

     

    • 해당 함수를 호출하는 부분이다.

    result = hanlde[op] (num1, num2);

     

    결과 :

     

     

     

     

    728x90
    반응형
상단으로