Recent Posts
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Today
Total
관리 메뉴

갈라파고스

[C] 함수 포인터 만들기 본문

연구/C

[C] 함수 포인터 만들기

9yelin9 2022. 6. 29. 01:02

원인

Tight-binding 해밀토니안 만들 때 FM이랑 AF랑 푸리에 변환하는 과정이 미묘하게 차이가 나는 바람에 골치아팠다.

for 루프 안에 if 넣기는 죽어도 싫고...

이것저것 많이 해보다가 발견한 정답은 바로 함수 포인터였다.

이걸로 고민 많이 했었는데 해결해서 기분이 좋다ㅎㅎ

 

해결

다음과 같은 두 함수가 있다고 하자.

int Add(int i, int j) {
	return i + j;
}

int Sub(int i, int j) {
	return i - j;
}

그리고 이들을 사용하기 위한 함수 포인터의 형태는 다음과 같다.

int (*Calculate)(int, int)

함수 자료형과 매개변수 자료형, 개수가 원래 함수들과 같아야한다.

 

함수 포인터는 왜 쓰는가?

Calculate 라는 함수를 어떤 때는 Add 로 쓰고, 어떤 때는 Sub 로 쓰기 위해서다.

 

함수 포인터를 사용해보자.

int main() {
	int i = 1, j = 2;
    	int (*Calculate)(int, int);
    
    	Calculate = Add;
    	printf("%d\n", Calculate(i, j)); // 3
    
    	Calculate = Sub;
    	printf("%d\n", Calculate(i, j)); // -1
    
	return 0;
}

 

이번엔 함수 포인터가 유용한 상황을 살펴보자.

int main() {
	int i, j;
    	int (*Calculate)(int, int);
        
        printf("Enter a integer : ");
        scanf("%d", &j);
        
        if(j > 0) {
        	Calculate = Add;
        }
        else {
        	Calculate = Sub;
        }
        
        for(i=0; i<3; i++) {
        	printf("%d\n", Calculate(i, j));
        }
        
        return 0;
}

여기서 만약 함수 포인터를 사용하지 않았다면 for 루프 안에 if 가 들어가서 Add 를 쓸지 Sub 를 쓸지 판별해야 한다.

그러면 시간도 더 오래 걸리고 비효율적이다!

함수 포인터는 최고다.

 

참고

https://dojang.io/mod/page/view.php?id=593 

 

C 언어 코딩 도장: 68.2 반환값과 매개변수가 있는 함수 포인터 만들기

이번에는 반환값과 매개변수가 있는 함수 포인터를 만들어보겠습니다. 다음과 같이 반환값 자료형을 지정해주고, 맨 뒤의 괄호에 매개변수의 자료형을 지정합니다(매개변수 이름은 생략해도

dojang.io

 

'연구 > C' 카테고리의 다른 글

[C] warning: ignoring return value of ‘fscanf’  (0) 2021.12.09
Comments