C 함수 포인터 구문
내 질문은 아주 간단한 것이다.
일반적으로 변수를 선언할 때 다음과 같이 변수의 유형을 앞에 두십시오.
int a;
함수 포인터에는 다음과 같은 형식이 있을 수 있다.int(*)(int,int)
두 개의 정수를 사용하고 정수를 반환하는 함수를 가리킬 경우.그러나 그러한 포인터를 선언할 때 식별자는 다음과 같이 형식을 쫓지 않는다.
int(*)(int,int) mypointer;
대신 식별자를 가운데로 작성해야 한다.
int(*mypointer)(int,int);
왜 그런가?미안, 민망할 정도로 쉬운 질문인 건 알지만...
모두들 답장해줘서 고마워.틀:축구단
어레이, 포인터 및 기능에 대한 C 구문이 왜 이렇게 설계되었는가?라는 질문에 이렇게 설명하며, 기본적으로 다음과 같이 요약된다.
언어 저자들은 구문을 유형 중심보다는 가변 중심적으로 만드는 것을 선호했다.즉, 그들은 프로그래머가 선언문을 보고 "만약 내가 그 표현을 쓴다면" 라고 생각하기를 원했다.
*func(arg)
그렇게 되면...int
; 만약 내가 글을 쓴다면*arg[N]
"난 떠다닐 거야"가 아니라func
이것을 가져다가 그것을 반환하는 함수의 포인터가 되어야 한다."Ritchie의 아이디어는 식별자를 그들의 용도와 유사한 맥락에서 "사용에 대한 선언"이라고 선언하는 것이었다.
...K&R2의 p122를 콕 찍어.
이 구조는 정상 함수를 선언(및 사용)하는 방법을 반영한다.
정상 함수 정의를 고려하십시오.
int foo (int bar, int baz, int quux);
이제 동일한 서명의 함수에 대한 함수 포인터를 정의하는 것을 고려하십시오.
int (*foo) (int, int, int);
두 구조물이 어떻게 서로 거울을 비추는지 알아?그렇게 되다*foo
다른 것보다 기능 포인터로 식별하는 것이 훨씬 쉽다.
나는 몇몇 장소에서 다음과 같이 선언된 기능 포인터를 본 적이 있다.
int (*foo) (int a, int b);
그리고 어떤 곳에서는a
그리고b
언급되지 않고 둘 다 여전히 효과가 있다.
그렇게
int (*foo) (int, int)
또한 정확하다.
내가 기억하는 아주 간단한 방법은 다음과 같다.
함수가 다음과 같이 선언된다고 가정하십시오.
int function (int a , int b);
1단계: 기능을 괄호 안에 넣으십시오.
int (function) (int a , int b);
2단계: 배치 a*
함수 이름 앞에 있는 이름을 변경하십시오.
int (*funcPntr) (int a , int b);
PS: 나는 이 답변에서 규약 등을 명명하기 위한 적절한 코딩 지침을 따르고 있지 않다.
함수(한 함수에 대한 포인터가 아님)를 다루고 있다면, 그 이름도 가운데에 있다.다음과 같다.return-type function-name "(" argument-list ")" ...
. 예를 들어,int foo(int)
,int
반환 유형,foo
이름 그리고int
논점 목록
함수에 대한 포인터는 거의 같은 방식으로 작동하는데, 반환 유형, 이름, 인수 목록 등이 그것이다.이 경우 a를 추가해야 한다.*
포인터로 삼기 위해서, 그리고 (이후부터)*
포인터가 접두사인 경우) 바인딩할 괄호 쌍*
반환 형식 대신 이름에 연결하십시오.예를 들어,int *foo(int)
이다.다음 *을(를) 얻기foo
대신, 우리는 괄호가 필요하다.int (*foo)(int)
.
이것은 기능을 위한 일련의 포인터가 필요할 때 특히 더 보기 흉해진다.이러한 경우 대부분의 사용자는 포인터 유형에 대해 typeef를 사용한 후 해당 유형의 배열을 만드는 것이 가장 쉽다는 것을 알게 된다.
typedef int (*fptr)(int);
fptr array[10];
참조URL: https://stackoverflow.com/questions/14114749/c-function-pointer-syntax
'IT이야기' 카테고리의 다른 글
동적 위치에 Vue 구성 요소를 삽입하는 방법 (0) | 2022.05.14 |
---|---|
변수에 저장된 지정된 파일 설명자가 여전히 유효한지 확인하는 방법 (0) | 2022.05.13 |
Composition API를 사용하여 Vuex 지도 도움말에 액세스하는 방법 (0) | 2022.05.13 |
C에서 이중 밑줄(__const)은 무엇을 의미하는가? (0) | 2022.05.13 |
'vuefire'에서 내보내기 'default'('VueFire'로 가져오기)를 찾을 수 없음 (0) | 2022.05.13 |