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
반응형