C 언어 에서 함수 포인터 용법 에 대한 잡담

1491 단어 c 언어C포인터
C 프로그램 을 작성 할 때 자주 사용 되 지 않 는 포인터 의 사용법 을 기록 합 니 다.수시로 업데이트 합 니 다.2019/5/17 update
1.함수 포인터 사용:
먼저 아래 세 가지 함수 의 성명 방식 을 보십시오.A)  char   * (*fun1)( char   * p1, char   * p2); B)  char   * *fun2( char   * p1, char   * p2); C)  char   * fun3( char   * p1, char   * p2);
A 는 전형 적 인 함수 포인터 사용 방식 으로 B 와 C 는 모두 정상 적 인 함수 성명 이 고 뒤의 두 가지 차이 점 은 돌아 오 는 char*형,돌아 오 는 char*형 에 있다.
fun 1 여기 서 입구 매개 변 수 를 가리 키 는 것 은(char*,char*)형 이 고 반환 값 은 char*형의 함수 입 니 다.
이 때 함 수 를 새로 만 들 면:char*Fun(char*,char*);그러면 이렇게 조작 할 수 있 습 니 다:fun 1=Fun;
2.반전 함수 의 실현:
    예 를 들 어 직렬 수신 인 터 럽 트 에서 함 수 를 호출 하여 직렬 수신 바이트 데 이 터 를 전달 하고 자 합 니 다.실현 하 는 방식 은 다음 과 같 습 니 다.
우선 함수 포인터 설명:
static void (*HAL_UartRx_CB)(uint8_t rdata) = (void*)0;

그 다음 에 리 셋 함수 의 등록 인 터 페 이 스 를 제공 하고 지난 단계 에 설명 한 함수 포인터 와 입구 매개 변 수 를 연결 합 니 다.
void HAL_AssignRxISR(void Rx_ISR(uint8_t data))
{
	HAL_UartRx_CB = Rx_ISR;
}

마지막 으로 직렬 수신 인 터 럽 트 에서 이 정 의 된 함 수 를 호출 하면 됩 니 다.
interrupt void Uart_Rx_ISR(void)
{
    /* Call Rx callback function when receive one byte data .*/
	if(HAL_UartRx_CB != ((void*) 0)
	{
		HAL_UartRx_CB(&RxData);
	}
}

좋은 웹페이지 즐겨찾기