집 >백엔드 개발 >C#.Net 튜토리얼 >C에서 함수에 대한 포인터를 선언하는 방법은 무엇입니까?
C에서는 일반 데이터 포인터(int*, char* 등)와 마찬가지로 함수에 대한 포인터, 즉 함수 포인터를 선언할 수도 있습니다. 그럼 어떻게 선언해야 할까요? 다음 기사에서는 함수 포인터를 선언하는 방법을 설명하겠습니다. 도움이 되기를 바랍니다. [동영상 튜토리얼 추천: C 언어 튜토리얼]
함수에 대한 포인터를 어떻게 선언하나요?
먼저 C에서 정수에 대한 포인터를 만드는 방법을 알아볼까요?
int * ptrInteger; / *我们在int和ptrInteger之间放置了一个*运算符来创建指针。* /
여기서 ptrInteger는 정수에 대한 포인터입니다. 이것이 이해될 수 있다면 논리적으로 함수에 대한 포인터를 선언하는 데 아무런 문제가 없어야 합니다.
다음으로 함수 선언 방법을 살펴볼까요? 예:
int foo(int);
foo 여기에는 int 유형 매개변수를 반환하고 받아들이는 함수가 있습니다. 따라서 논리적으로 사람은 int와 foo(int) 사이에 * 연산자를 넣는 것만으로도 함수에 대한 포인터를 생성해야 한다고 생각할 수 있습니다. 즉:
int * foo(int);
그러나 이것은 옳지 않습니다. 왜냐하면 c 연산자가 우선순위를 갖기 때문입니다. 여기에서 재생하면 연산자 ()가 연산자 *보다 우선합니다. 위 선언은 매개변수 중 하나가 int 유형이고 반환 값이 int*인 함수 foo를 의미합니다. 이는 우리가 원하는 것이 아니므로 c 연산자 우선순위도 고려해야 합니다.
그래서 우리는 어떻게든 * 연산자를 foo와 바인딩해야 합니다. 이를 위해 () 연산자를 사용하여 C 연산자의 기본 우선 순위를 변경합니다. 예:
int (*foo)(int);
* 연산자는 foo와 함께 사용되며 foo는 함수 이름이므로 함수에 대한 포인터를 선언합니다.
함수 포인터 사용 예:
#include <stdio.h> // 具有int参数和void返回类型的普通函数 void fun(int a) { printf("a值为: %d\n", a); } int main() { // fun_ptr 是指向函数fun()的指针 void (*fun_ptr)(int) = &fun; /* 相当于下面两行 void (*fun_ptr)(int); fun_ptr = &fun; */ //使用fun_ptr调用fun() (*fun_ptr)(10); return 0; }
출력:
설명:
1. 일반적으로 함수 포인터는 실행 가능한 코드의 시작을 저장합니다.
2. 일반 포인터와 달리 함수 포인터를 사용하여 메모리를 할당하고 해제하지 않습니다.
3. 함수 포인터에서 함수 이름을 사용하여 함수 주소를 얻을 수도 있습니다.
4. 일반 데이터 포인터와 마찬가지로 함수 포인터는 매개변수로 전달되거나 함수에서 반환될 수 있습니다.
위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 관련 튜토리얼 열을 주의 깊게 살펴보세요! ! !
위 내용은 C에서 함수에 대한 포인터를 선언하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!