15강 함수 포인터

YU YU·2021년 9월 16일
0

15 함수 포인터

15-1 함수 포인터

C언어 프로그램의 모든 함수는 내부적으로 포인터 형태로 관리할 수 있다.
-함수의 이름을 이용해 특정한 함수를 호출한다. 함수의 이름은 메몸리 주소를 반환한다.

#include <stdio.h>
void function(){
	printf("It's my function");
}


int main(void) {
	printf("%d\n",function);
	system("pause");
	return 0;
}

위와 같이 함수의 이름 값을 출력하면 함수가 실행되는 것이 아닌 메모리 주소값이 출력이 된다.

15-2 함수 포인터 사용법

특정한 함수의 반환 자료형을 지정하는 방식으로 선언할 수 있다.

반환 자료형(*이름)(매개변수) = 함수형;

특정한 함수 포인터를 가르키는 함수를 만들 수 있는 것이다.
함수 포인터를 이용하면 형태가 같지만 서로 다른 기능의 함수를 선택적으로 사용할 수 있다.

#include <stdio.h>

void myFunction(){
	printf("It's my function");
    }
    
void yourFunction(){
	printf("It's your function.\n");
    }
    
int main(void){
	void(*fp)() = myFunction;
    fp();
    fp = yourFunction;
    fp();
    system("pause");
    return 0;
}


void(*fp)() = myfunction;'fp'라는 이름의 함수 포인터를 만드는 것이었다. 그 후에
fp = yourFunction;으로 함수 포인터를 새로 만들지 않아도 같은 함수 포인터에 다른 함수를 대입할 수 있다.
printf는 줄바꿈 기능이 없는 함수이다.

매개 변수 및 반환 자료형이 있는 포인터

#include <stdio.h>

int add(int a, int b){
	return a+b;
}

int sub(int a, int b){
	return a-b;
}

int main(void){
	int(*fp)(int,int) = add;
    printf("%d\n",fp(10,3));
    fp = sub;
    printf("%d\n",fp(10,3));
    system("pause");
    return 0;
}

결과값

함수 포인터를 반환하여 사용하기

잘 안쓰는 거긴 하다. 그래도 원리는 이해하자.

#include <stdio.h>

int add(int a, int b){
	return a+b;
}

int (*process(char* a))(int,int){
	printf("%s\n",a);
    return add;
}

int main(void){
	printf("%d\n",process("10과 20을 더해보겠습니다.")(10,20));
    system("pause");
    return 0;
}

int (*process(char*a))(int,int)부분은 process라는 함수 포인터에 a라는 함수 포인터를 만들겠다는 것이다. a라는 함수 포인터는 int형 2개의 매개변수를 받는다는 표현이다.
즉, 이 함수를 풀어보자면 process라는 함수 포인터를 만드는데 그 포인터는 a라는 int형 2개를 포함하는 포인터를 매개변수를 받는다는 것이다.

process : 함수 포인터
process의 매개변수 : a
a : 함수 포인터
a의 매개변수: int,int 즉, int형 2개의 매개변수

profile
코딩 재밌어요!

0개의 댓글

관련 채용 정보