태그 보관물: pointers

pointers

C 포인터에서 우선 순위는 어떻게 결정됩니까? 포인터 선언을 보았습니다. 우선 순위 규칙에

이해하기 어려운 두 가지 포인터 선언을 보았습니다. 우선 순위 규칙에 대한 나의 이해는 다음과 같습니다.

Operator             Precedence             Associativity
(), [ ]                  1                  Left to Right
*, identifier            2                  Right to Left
Data type                3

그러나 이것조차도 다음 예제를 올바르게 평가하는 방법을 알 수없는 것 같습니다.

첫 번째 예

float * (* (*ptr)(int))(double **,char c)

내 평가 :

  1. *(ptr)
  2. (int)
  3. *(*ptr)(int)
  4. *(*(*ptr)(int))

그때,

  1. double **
  2. char c

두 번째 예

unsigned **( * (*ptr) [5] ) (char const *,int *)
  1. *(ptr)
  2. [5]
  3. *(*ptr)[5]
  4. *(*(*ptr)[5])
  5. **(*(*ptr)[5])

어떻게 해야 내가 그들을 읽어?



답변

첫 번째에 대한 내 추측 : ptr은 매개 변수를 int로 사용하는 함수에 대한 포인터이며 double 및 char에 대한 포인터를 매개 변수로 사용하는 함수에 대한 포인터를 반환하고 float에 대한 포인터를 반환합니다.

해석 :

(* ptr) (int)

ptr은 int를 인수로 사용하는 함수에 대한 포인터라고 말합니다. 그 함수가 무엇을 반환하는지 알아 내려면 뷰를 확장해야합니다.

(* (* ptr) (int))

이것은 함수가 다른 함수에 대한 포인터를 반환한다는 것을 의미합니다. 다른 기능의 매개 변수는 다음과 같습니다.

(더블 **, 문자 c)

그리고 그것은 반환

플로트 *

그리고 두 번째 것 : ptr은 매개 변수로 char에 대한 상수 포인터와 int에 대한 포인터를 가져 와서 unsigned int의 포인터에 대한 포인터를 반환하는 함수에 대한 5 개의 포인터 배열에 대한 포인터입니다.

해석 :

(* (* ptr) [5])

함수에 대한 5 개의 포인터 배열에 대한 포인터로 ptr을 선언합니다.

(char const *, int *)

논쟁과 귀환으로

부호없는 **


답변

‘The Clockwise Spiral’Method를 사용하여 이러한 미친 선언을 이해할 수 있습니다.

http://c-faq.com/decl/spiral.anderson.html

나는 여기에 블로그를 올렸다.

http://www.kalekold.net/index.php?post=4


답변

함수 포인터입니다. 그것을 작성한 사람은 typedef를 더 잘 사용하여 더 명확하게 만들 수 있습니다.

사실상 이러한 매개 변수로 작동하는 포인터입니다. float * myfunc (더블 **, 문자)


답변


답변