함수 포인터와 void 포인터
함수포인터와 void 포인터
이것들이 도대체 무엇인지에 대해
정말 간만보는 포스팅을 진행하겠다.
![]()
함수는 CPU에 의해서 실행된다.
CPU에 의해 실행되려면 메모리에 올라와 있어야한다.
(메인 메모리)
![]()
함수의 몸체가 메모리 상에 올라가고
그 놈이 어딨는지를 알아야 한다.
고로 함수의 이름이 함수의 몸체가
메모리의 어디에 있는지 가리키는 포인터가 된다.
void fct(int n, int n2){
..
..
}
![]()
함수 포인터의 구성 = 몸체의 주소 + 자료형
함수의 포인터 타입을 결정짓는 요소
1. 리턴 타입
2. 매개 변수 타입
![]()
함수 포인터의 선언
void (*pfct)(int n, int n2) = fct;
리턴 타입과 매개 변수의 타입이 같다!
fct는 포인터이기 때문에 선언된 함수포인터에
자신이 가리키는 함수의 주소값을 넘겨줌.
int n = 10;
int * p = &n;
int *fp = p;
위와 같은 형태이다.
사용법 또한 같다
pfct(1,2);
fct(2,4);
pfct = fct ==> 주소값도 같다
![]()
void형 포인터
포인터는 주소값을 저장할 수 있는 변수
하지만 자료형에 대한 정보가 제외된 형태.
void* p;
int, char 구분 없이 저장 가능하다.
int n = 10;
char c = 'c';
void* vp;
vp = &n;
vp = &c;
가능한 이유?
자료형에 대한 정보가 제외되어 있기 때문.
하지만 기능이 제한된다.
포인터 연산, 메모리 참조와 관련된 일에 활용 할 수 없다.
왜?
포인터 연산을 했을 때 메모리를 얼마나 참조할 것인가에 대한 정보 --> 자료형
void 포인터는 어떠한 데이터 특성을 지니는지의 정보가 없다
메모리를 어떻게 참조할지 모른다.(타입에 대한 정보가 없기 때문)
int main(){
int n = 10;
void * vp = &n;
*vp = 20;
--> 1바이트를 참조할지 4바이트를 참조할지 모른다.
vp++;
--> 이 또한 마찬가지
}
![]()
함수 포인터와 void 포인터의
정말 기본적인 내용에 대해 알아보았다.
활용법에 대해서도 충분히 알아야 할 것 같으니
다음 포스팅에서 좀 더 자세히 알아보도록 하겠다.
GoodBye~
'C, 자료구조' 카테고리의 다른 글
| [자료구조] 연결 리스트의 이해(2) (0) | 2017.04.02 |
|---|---|
| [자료구조] 연결 리스트의 이해(1) (0) | 2017.03.29 |
| [자료구조] 단순 정렬 알고리즘 (버블, 삽입, 선택) (0) | 2017.02.17 |
| [C] 재귀 함수 (0) | 2016.12.21 |
| [C] static 변수 (0) | 2016.12.21 |