본문 바로가기

PROGRAMMING LANGUAGE/C

19강 함수 포인터와 void 포인터

#include <stdio.h>

int WhoIsFirst(int age1, int age2, int (*cmp)(int n1, int n2))
{
	return cmp(age1, age2);
}

int OlderFirst(int age1, int age2)
{
	if (age1 > age2)
		return age1;
	else if (age1 < age2)
		return age2;
	else
		return 0;
}

int YoungerFirst(int age1, int age2)  
{
	if (age1 < age2)
		return age1;
	else if (age1 > age2)
		return age2;
	else
		return 0;
}

int main(void)
{
	int age1 = 20;
	int age2 = 30;
	int first;

	printf("입장순서 1 \n");
	first = WhoIsFirst(age1, age2, OlderFirst);
	printf("%d세와 %d세 중 %d세가 먼저 입장! \n\n", age1, age2, first);

	printf("입장순서 2 \n");
	first = WhoIsFirst(age1, age2, YoungerFirst);
	printf("%d세와 %d세 중 %d세가 먼저 입장! \n\n", age1, age2, first);
	return 0;
}

int WhoIsFirst(int age1, int age2, int (*cmp)(int n1, int n2)){ ... } 함수에 매개변수로 age1, age2 변수를

1번째와 2번쨰 매개변수로 전달하고 3번쨰 매개변수로 함수 포인터를 전달하여 WhoIsFirst함수에서

OlderFirst함수를 실행하게 했다.

YoungerFirst 함수 포인터를 사용해도 가능하다.

 

#include <stdio.h>

void SoSimpleFunc(void)
{
	printf("I'm so simple");
}

int main(void)
{
	int num = 20;
	void* ptr;
	
	ptr = &num;
	printf("%p \n", ptr);

	ptr = SoSimpleFunc;
	printf("%p \n", ptr);
	return 0;  
}

void 포인터는 int형 주소를 가지고 있다가 함수를 가지게 됐다. 하지만 포인터 연산이 불가능하고

값의 변경이나 참조가 불가능하다. void형 포인터는 일단 주소 값에만 의미를 두고 포인터의 형은

나중에 결정할 때 사용한다. 

'PROGRAMMING LANGUAGE > C' 카테고리의 다른 글

21강, 22강 TYPEDEF, 공용체, 열거형  (0) 2021.09.20
20강 구조체  (0) 2021.09.16
18강 다중포인터  (0) 2021.09.16
17-1 포인터 배열과 배열 포인터  (0) 2021.09.16
17강 다차원 배열  (0) 2021.09.16