#include <stdarg.h>
자료를 쭉 담을 수 있는 연결리스트라는 느낌
va_start(va_list ap, 고정인수)
va_list의 첫번째 가변인자 주소를 알려면 고정인수가 필요함. 자료형의 크기를 결정하는 인자.
ap포인터를 타입 길이(고정인수 크기)만큼 뒤로 옮기기 때문에 그 다음 값이 이어서 출력됨
가변인자의 사용이 끝날 때 사용하는 함수임
#include <stdio.h>
#include <stdarg.h>
void printNumbers(int args, ...)
{
va_list ap; // 가변 인자 목록 포인터
va_start(ap, args); // 가변 인자 목록 포인터 설정
for (int i = 0; i < args; i++) // 가변 인자 개수만큼 반복
{
int num = va_arg(ap, int); // int 크기만큼 가변 인자 목록 포인터에서 값을 가져옴
// ap를 int 크기만큼 순방향으로 이동
printf("%d ", num); // 가변 인자 값 출력
}
va_end(ap); // 가변 인자 목록 포인터를 NULL로 초기화
printf("\n");
}
int main()
{
printNumbers(1, 10); // 인수 개수 1개
printNumbers(2, 10, 20); // 인수 개수 2개
printNumbers(3, 10, 20, 30); // 인수 개수 3개
printNumbers(4, 10, 20, 30, 40); // 인수 개수 4개
return 0;
}
인자를 받아 출력하는 함수
사용예시) /printf("abcd")
/ printf("%d", 32)
/.../
서식지정자 %
d
i
u
x
X
q
c
s
첫번째 인자를 읽으면서 %
를 발견하면 그 뒤의 문자를 읽어서 다음 인자와 매치시킴
%d | %i | %u | %x | %X | %c | %s | %p | %% |
---|---|---|---|---|---|---|---|---|
10진수 숫자 | 10진수 정수 | 부호없는 10진수 정수 | 16진수 소문자 | 16진수 대문자 | 단일문자 | 문자열 | void포인터 | (%)출력 |