함수 포인터
: 함수가 저장된 메모리 공간의 주소값
반환형 + 포인터 이름 + 매개변수 선언
int (*fptr) (int)
-> fptr : 포인터
int : 반환형이 int인 함수 포인터
(int) : 매개변수 선언이 int 하나인 함수 포인터
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");
first = WhoIsFirst(age1, age2, OlderFirst);
printf("%d세와 %d세 중 %d세가 먼저 입장", age1, age2, first);
printf("입장순서 2");
first = WhoIsFirst(age1, age2, YoungerFirst);
printf("%d세와 %d세 중 %d세가 먼저 입장", age1, age2, first);
return 0;
}
Void인 포인터 함수
void Func(void)
{
printf("안녕");
}
int main (void)
{
int num= 20;
void * ptr;
ptr = #
printf(ptr); -> 주소값 나옴
ptr = Func;
printf(ptr); -> 주소값 나옴
return 0;
}
무엇이든 담을 수 있고, 주소 또한 담을 수 있다
main 함수에서 인자 받기
int main(int argc, char *argv[])
{
int i = 0;
printf("전달된 문자열의 수: %d",argc);
while(argv[i]!=NULL) -> 콘솔로 받은 문자열에서 NULL있으면 문자 자름
{
printf("%d번째 문자열: %s",i+1 , argv[i]);
i++;
}
}
구조체에서의 포인터
반환형 + 구조체 이름 + 포인터 이름
struct point * ptr
구조체에서 포인터는 화살표 표기를 사용한다
(ring.center)-> xpos, (ring.center)-> ypos
pptr->xpos, pptr->ypos
struct point
{
int xpos;
int ypos;
}
int main (void)
{
struct point pos1 = {1, 2};
struct point pos2 = {100, 200};
struct point * pptr = &pos1;
(*pptr).xpos += 4;
(*pptr).ypos += 5;
printf("%d ,%d" , pptr->xpos, pptr->ypos);
pptr = &pos2;
pptr -> xpos +=1;
pptr -> ypos +=2;
printf("%d ,%d" , (*pptr).xpos , (*pptr).ypos);
return 0;
}
struct point
{
int xpos;
int ypos;
}
struct circle
{
double radius;
struct point * center;
}
int main(void)
{
struct point cen = {2, 7};
double rad=5.5;
struct circle ring = {rad, &cen};
printf("반지름 %g",ring.radius); //5.5
printf("원 중심 %d, %d", (ring.center)-> xpos, (ring.center)-> ypos); //2, 7
return 0;
}
'언어 > C, C++, C#' 카테고리의 다른 글
[ C# ] 람다함수 (0) | 2022.07.03 |
---|---|
[ C# ] main함수 여러 개일 때 컴파일 (0) | 2022.07.02 |
[ C ] Stream (0) | 2022.06.02 |
[ C ] 포인터 (0) | 2022.05.29 |
[ C# ] 닷넷 예제 공부 (0) | 2021.12.16 |