Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- ASCCII
- c언어
- C Mount
- 조건 제어문
- AppInventer
- 렌즈
- 카메라
- Patch Cleaner
- Gain
- 심도
- 과초점거리
- 아이리스
- image sensor
- 실생활알고리즘
- Pixel Bit Format
- 이미지센서
- 변수의 초기화와 대입
- main 함수 인자 전달
- Digital Slow Shutter
- 무게선별자동화
- Depth of Fileld
- 고정비트레이트
- 간단한 앱만들어보기
- CS Mount
- 저조도
- 저장소와 동적메모리
- 변수
- Zoom Lense
- camera
- 프로그래머스 lv2
Archives
- Today
- Total
카메라 개발자 공부방(SW)
[26장] 가변인자 본문
반응형
오늘은 가변 인자에 대해 배워볼 시간입니다.
가변 인자의 대표적인 함수로는 prinf와 scanf 함수가 있습니다.
함수를 호출하여 인자를 전달할 때, 인자 입력에 제한이 없었죠?
printf("%d\n", 1);
printf("%d %d\n", 1, 2);
printf("%d %d %d\n", 1, 2, 3);
printf("%d %d %d %d\n", 1, 2, 3, 4);
scanf는 콘솔에서 사용자의 입력을 받는 함수입니다(이제야 소개를 하지만).
이런 함수를 구현해야된다고 생각해봅시다.
인자를 받는 부분을 어떻게 해야 될까요?
이럴 때 생각해볼 수 있는 방법은 가변 인자를 사용하는 것입니다.
아래의 코드를 보시죠
#include <stdio.h>
void Print(int n, ...) // ... 가변인자입니다.
{
int* pn = &n;
for (int k = 0; k < 3; k++)
printf("%d ", pn[k]);
printf("\n");
}
int main()
{
Print(1, 2, 3);
return 0;
}
// 실행결과
// 1 2 3
그림으로 보면 아래와 같습니다.
여기서 첫 번째 변수는 꼭 선언해줘야 합니다.
첫 번째 변수를 알아야 그 뒤의 메모리 값도 알 수 있기 때문이지요!
#include <stdio.h>
void Print(int n, ...)
{
int* pn = &n;
for (int k = 0; k < n; k++)
printf("%d ", pn[k]);
printf("\n");
}
int main()
{
Print(0);
Print(2, 10, 100);
Print(3, 10, 200, 3000);
Print(4, 1, 2, 3, 4);
}
// 실행결과
// 10 100
// 10 200 3000
// 1 2 3 4
코드가 이해가 되시죠?
첫번째 변수의 주소를 배열의 이름처럼 사용하고 그다음 인자까지 접근하여 출력을 한 것입니다.
Print 함수를 Server
main 함수를 Client라 한다면
서버에선 Client가 얼만큼의 크기 만큼 가변인자를 사용할지 모르기 때문에,
사이즈가 얼만큼 있어~라고 Server에게 전달해줘야 합니다.
그래서 위의 코드 형태로 가변 인자를 사용할 수 있습니다.
자 오늘은 여기까지~
'Langauge > C' 카테고리의 다른 글
[27장] union (0) | 2021.10.20 |
---|---|
[25장] main 함수의 인자전달 (0) | 2021.10.18 |
[24장] const (0) | 2021.10.13 |
[23장] 파일 입출력 (0) | 2021.10.12 |
[22장] 재귀함수 (0) | 2021.10.11 |
Comments