2017-12-30 55 views
-5

C 언어의 다음 유형의 포인터 선언의 차이점은 무엇입니까?C 언어의 포인터 선언을 이해하는 데 도움이 필요합니다.

int *p(int a), 
int (*p)(int a), 
int *(*p)(it(*a)[]), 

적절한 설명을 위해 몇 가지 예가 추가 된 경우 매우 유용합니다.

+0

https://cdecl.org/를 입력하고'a' 예제없이 표현식을 입력하십시오 :'int * (* p) (int (*) [])' – 4386427

+0

세 번째 하나는 그것을 사용하지 않는 것입니다. 그렇게하면 코드 검토 직후에 해고 당할 가능성이 있습니다. –

답변

1
int *p(int a); 

나는 그것이 포인터 선언임을 강력히 의심합니다. 더 잘 작성된 경우 함수int이고 int에 대한 포인터를 반환한다는 것을 이해할 수 있습니다.


int (*p)(int a); 

기본 함수 포인터. pint을 사용하고 int을 반환하는 함수를 가리 킵니다. 예를 들어이 무효이기 때문에

int foo(int x) { return x+1; } 
p = &foo; 

마지막 하나는 비트 복잡하다. 괄호 안에 숫자가 있어야합니다. 나는 그것이 다음과 같이 (오타를 포함하여) 수정되었다고 가정한다.

int *(*p)(int(*a)[3]); 

는 함수 포인터 함수 int 3 개의 배열에 대한 포인터를 취하고, int 포인터를 리턴이다. 예를 들어

int *extract_first(int (*a)[3]) { 
    return (*a); 
} 
p = &extract_first; 
+0

'3 '을 추가해야 할 필요가 있습니까? 나는 그것이 C++에 대해서만 정확하다고 생각하지 않는다. – 4386427

1

첫 번째 FA 함수 선언, 그것은 int를 취하고 포인터 투 INT, 번째 인을 반환하는 함수 포인터 int를 복용하는 int 경우] 반환 제 했어야 :

int * (*p) (int(*a)[]); 

그것은 취하는 함수 포인터이다 포인터 투 AN-INT-의 배열 및 포인터 투 INT 복귀.