함수 포인터 강의에서 질문이 있습니다.
int(*pfGetMax)(int,int,int) = GetMax; 를 통해
함수 포인터 선언 정의를 동시에 하고
printf("MAX: %d\n", pfGetMax(1,3,2)); 를 하셨는데
함수 포인터를 사용하여 GetMax 함수를 호출하는 과정에서
pfGetMax(1,3,2)를 사용하셨는데
이 표현이 이해가 가지 않았습니다.
포인터의 간접지정을 통해서 값을 가져와야 한다고 생각했는데
(*pfGetMax)(1,3,2) 처럼 해야하는 것이 아닌가요?
답변 2
0
음...이해의 대상이 아니라 암기의 대상(문법)입니다. 함수호출 연산자의 피연산자는 함수형 주소(혹은 주소가 저장된 포인터)입니다. GetMax는 함수의 이름이며 실행코드가 저장된 메모리의 주소입니다. 그러나 pfGetMax는 포인터 변수입니다. 이에 대해 간접지정 연산을 수행할 경우 이는 함수에 대한 주소가 아니므로 함수호출연산자의 피연산자가 될 수 없습니다. 참고하시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. davidkjcy님, 함수 포인터에 관한 질문 감사합니다.
함수 포인터를 사용할 때, 함수 포인터 변수 pfGetMax를 호출할 때 (*pfGetMax)(1,3,2)와 같이 쓰는 것이 일반적인 포인터의 간접 참조 방식입니다. 하지만 C언어에서는 함수 포인터를 통해 함수를 호출할 때 간접 참조 연산자 (*)를 생략할 수 있으며, 이 경우에도 컴파일러가 이를 올바르게 해석하여 함수를 호출합니다. 따라서 pfGetMax(1,3,2)와 (*pfGetMax)(1,3,2)는 기능적으로 동일하게 작동합니다.
이는 함수 이름 자체가 함수의 시작 주소를 의미하는 포인터처럼 동작하기 때문에 가능한 것입니다. C언어의 포인터 문법은 다소 직관적이지 않을 수 있으므로, 이와 같은 특수한 경우에 혼란이 올 수 있습니다.
함수 포인터 사용에 더 자세히 알고 싶으시다면 해당 강의 내용을 다시 한번 꼼꼼히 확인해 보시거나, 추가 질문이 있으시면 언제든지 강의의 질문하기를 통해 질문하실 수 있습니다.
scanf("%d\n") 의미
0
20
1
주소 연산자(&) 간접 지정자(*) 반대 개념
0
33
1
Virtual Memory, Memory, Memory mapping tables
0
51
1
샘플코드 출력 오류 발생 질문드립니다
0
63
2
값의 교환에 사용되는 변수의 위치.
0
88
2
메모리 비교에 관한 질문
0
81
2
문자열 Null
0
63
1
C, C++
0
88
2
문자열 입출력 코드 에러
0
60
2
선생님! 120화 2분 50초 질문입니다.
0
67
1
caller 가 메모리 할당 해제를 할 때의 문제점 질문
0
64
2
단축키 맞는지 여부 문의드립니다.
0
60
2
문자열을 사용하는 이중 포인터에 대하여 질문합니다
0
66
1
char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요
0
78
2
용어 설명 필요
0
57
2
stdin, stdout
0
71
2
필수 실습 (최댓값을 반환하는 함수)
0
93
2
아......ㅠㅠ
0
100
2
버퍼 내 엔터
0
72
1
2진수 뺄셈에서 carry-out
0
112
2
union 식별자는 실무에서 보통 어디에서 사용하나요?
0
80
2
필수실습문제 공부법 (진도 vs 복습)
0
104
2
예제파일 다운로드
0
79
2
Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?
0
119
3





