티스토리 뷰
728x90
함수포인터
#include <stdio.h>
int isOdd(int value) {
if (value % 2 != 0) return 1;
return 0;
}
int isEven(int value) {
if (value % 2 == 0) return 1;
return 0;
}
void showIf(int* arr, int size, int (*pred)(int)) { // 배열의 시작, 배열의 길이, 함수 포인터
for (int i = 0; i < size; i++) {
if (pred(arr[i])) printf("%d", arr[i]);
puts("");
}
}
int main(void) {
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
showIf(a, 10, isOdd); // isOdd = 함수의 주소 // 함수의 이름만쓰면 함수의 주소를 호출
showIf(a, 10, isEven); // isOdd = 함수의 주소
}
- showIf(a, 10, isOdd) 여기서 isOdd 에서 함수 호출은 일어나지 않는다.
- 함수의 이름만 쓸 경우 함수의 주소를 말한다.
- showIf 함수에 isOdd 함수를 주소로 보내기 때문에 showIf 함수 마지막 인수는 주소를 받을 수 있는 포인터로 받아줘야 한다.
- int (*pred)(int)
포인터 배열
// 포인터 배열
int a[4] = { 1,2,3,4 };
int b[4] = { 5,9,7,8 };
int* pa[2];
pa[0] = a; // a 배열의 시작인 1의 주소를 저장
pa[1] = b; // b 배열의 시작인 2의 주소를 저장
printf("%d \n", *pa[1]); // 시작 지점 5 배열 밖 [] + 1 을 하면 시작 주소 5 다음 값인 9를 출력한다.
printf("%d \n", *(pa[1] + 1)); // 9
- int *pa[2] 로 배열을 저장할 포인터 배열 변수를 선언
- 이후 pa[1]에 a pa[2]에 b 배열을 대입한다.
- pa[0] = a 는 a 배열의 첫 번째 인덱스가 저장된다.
- pa[1] = b 는 b 배열의 첫 번째 인덱스가 저장된다.
- 이후 pa[1]에 a pa[2]에 b 배열을 대입한다.
- *(pa[0] + 1) 호출로 a 의 두 번째 인덱스를 불러올 수 있다.
- 괄호가 중요하다. 괄호가 없으면 단순히 + 연산자가 실행 되므로 주의 필요
728x90
'C' 카테고리의 다른 글
랜덤함수 (1) | 2024.02.07 |
---|---|
문자열 , 문자열 포인터 (0) | 2024.02.02 |
포인터와 함수, 포인터 배열 (1) | 2024.01.30 |
포인터 (1) | 2024.01.28 |
배열 (0) | 2024.01.25 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JPA
- 서버전송
- @Builder
- C
- 제약조건
- reactStart
- react 시작 오류
- optional
- @RequestParam
- ID
- 씹어먹는 C 언어
- 다른데서 react
- 셀렉트박스
- selectbox
- CheckBox
- React
- SCP
- commit 에러
- mircrosoft visual studio
- C언어
- App
- 셀프로젝트
- findFirstBy
- reactApp
- 체크박스
- 아이디
- @reqeustBody
- 받아오기
- th:selected
- 다중체크박스 처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함