2016-12-08 11 views
2

함수 이름을 사용하여 인수를 전달할 때 해당 함수에 대한 포인터를 사용하고 있습니까?함수 이름입니다. 그 함수에 대한 포인터입니까?

예 :

int foo(int a, int b); 

int main(void) 
{ 
    int a = foo(1,3); //foo() it's a pointer to the function foo()? 
    return 0; 
} 
+0

아니요, 해당 함수 만 호출합니다. –

+3

함수 이름은 인수로 전달 될 때 포인터로 감소합니다. 그게 당신이 정말로 신경 써야 할 전부입니다. – StoryTeller

+0

그것은 함수의 코드 주소로 점프하기 위해 컴파일되므로 포인터입니다 만 포인터에 대한 일반적인 이해가 아닙니다. 그 점에있어서 어떤 변수도 메모리에있는 공간을 가리키는 포인터라고 이해할 수 있습니다. – MotKohn

답변

5

당신이 찾고있는 기간은 기능 지정자입니다. 포인터 유형이 아니지만, 대부분의 경우 으로 변환됩니다.

에 따옴표 C11 표준 함수 부호 기능 타입을 갖는 표현

챕터 §6.3.2.1 (강조 광산). 그것은 sizeof 연산자 피연산자 때를 제외 _Alignof 연산자 65) 또는 단항 & 연산자 '기능 복귀 형' '형 함수의 부호는'입력 가지는 식으로 변환된다 '함수 반환 형식에 대한 포인터' '.

관은 "함수 호출"스펙의 일부, 제 6.5.2.2

호출 된 함수 (92)를 나타내고, 식) 무효 반환 또는 재 작동하는 입력 포인터를 가진다 행 배열 형 이외의 완전한 객체 형.

이는 함수 호출시 지정자가 실제로 포인터로 변환된다는 것을 알려줍니다.