2017-10-25 2 views
-1

그러한 선언은 void *(*function)()이 유효합니까? 유효하면 *function은 호출 된 주소로 모든 함수를 반환합니다. 그 주소에서 반환하는 값은 무엇입니까? 해당 값에서 저장되는 값은 0입니다. 0 인 경우 return 0의 차이점은 무엇이며 반환 유형이 void 인 함수에서는 아무 것도 반환하지 않습니다.함수에 대한 포인터 및 그 반환 유형 (void)

+0

* "

void *foo(void) { ... } void *bar(void) { ... } void *bletch(void) { ... } 

당신은 그 각각의 기능을 가리 키도록 function 포인터를 사용할 수 있으며, 전화를하는 런타임에 결정 : 당신은 void에 여러 기능, 각 반환 포인터를 가질 수있다 'void * (* function)()'선언은 유효합니까? "- 컴파일러는이 질문에 대한 최선의 대답을 제공합니다. 예, 유효합니다. 'function'은 인수를 얻지 않고 void 포인터를 반환하는 함수에 대한 포인터입니다. C 선언을 읽는 방법에 대한 자세한 설명은 [이 답변] (https://stackoverflow.com/a/30345939/4265352)을 참조하십시오. – axiac

+1

아마도 더 나은 접근 방법은 당신이 이러한 질문을 가지고 있음을 설명하는 것일 것입니다. –

답변

1

다음과 같이 선언 읽기 :

 function  -- function is a 
     *function  -- pointer to 
     (*function)() -- function taking unspecified parameters 
    *(*function)() -- returning pointer to 
void *(*function)(); -- void 

그래서, function입니다 함수 자체가 아닌 함수 유형에 포인터. 가

if (condition1) 
    function = foo; 
else if (condition2) 
    function = bar; 
else 
    function = bletch; 

void *ptr = function(); // or (*function)(); 
1

void * (*function)(); 

의미 표기법 "정해지지 않은 개수의 인수를받는 함수를 가리키는 function라는 이름의 함수 포인터를 선언는 다음 void * 반환합니다."

을이 단지를 선언 때문에 변수는 함수를 정의하지 않으므로 어떤 값이 반환 될지는 말할 수 없습니다. 호출하기 전에 함수를 가리 키도록이 포인터를 할당해야합니다.

당신은 당신이 function를 호출하는 경우, 당신은 당신이 주소를 포함하지만, 역 참조 할 수 없기 때문에 "순수 메모리 주소"로 생각할 수있는 void *을 다시 얻을 것이다, 뭔가를 가리 키도록 function를 할당 할되면 형형색색이없는 물체에.

void *을 반환하는 것이 반환 유형이 void 인 함수와 같지 않음에 유의하십시오. 전자 수단 "나는, 메모리 주소를 반환"후자 수단 "나는 전혀 아무것도 반환하지 않습니다."