Language/C

C언어 강좌 (배열과 포인터/함수 포인터)

Dexter_- 2016. 9. 12. 09:29
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
반응형