관리 메뉴

FU11M00N

C언어 함수포인터 본문

Programming/C Language

C언어 함수포인터

호IT 2020. 4. 14. 21:57

C언어 함수포인터란?


포인터 변수는 해당 변수의 메모리주소를 가질수있는 변수입니다.
그럼 함수포인터는 특정 함수에 대한 메모리 주소를 가질수있는것입니다.

함수포인터를 쓰는이유?


프로그램의 코드가 짧아집니다.

함수포인터를 배열에 담아서 사용할수있어 중복되는 코드를 줄일수있습니다.

사진 1-1

사진 1-1은 메모리의 구조를 간단히 그림화 시킨것입니다.

함수들은 코드세그먼트 영역에 저장됩니다.

 

#include <stdio.h>
void function(int a, int b){
	
	printf("%d + %d = %d\n",a,b,a+b);
}

int main(){
	
	function(10,20);
	
	return 0;
}

이 코드를 간단히 코드 세그먼트 영억으로 생각하여 봅시다!

사진 1-2

main함수에서 function함수를 호출하였습니다. 이 의미는 

main함수에서 function 200번지에 가서 function 함수를 실행시키고 main 100번지로 복귀를 하는 의미입니다.

 

그럼 함수포인터를 간단히 써보겠습니다.

#include <stdio.h>
void function(int a, int b){ // int 타입 2개로 a,b 선언
	
	printf("%d + %d = %d\n",a,b,a+b);
}

int main(){
	
	void (*p)(int,int)= function; //리턴값이 void 이고 매개변수는 int,int 인 함수의 주소 를 저장할수있는 함수포인터 p
	function(10,20); // 10과 20 의 인수를 넘겨주고 function 호출
    
     p(100,200); 100과 200 의 인수를 넘겨주고 function 호출
	
	printf("%p %p",p,function); // p와 function의 주소를 알기위한것
	return 0;
}

 

 

 

void (*p) (int,int) = function; 은

리턴값이 void 이고 매개변수는 int,int 인 함수의 주소 를 저장할수있는 함수포인터 p 입니다. 

그렇기 때문에 p(100,200); 으로 function함수 주소 번지수로 가서 값을 대입할수있는것입니다!

사진 1-3

Comments