게임 개발자를 위한 C++ 문법 1-2
1. WHAT
- 가변인자(...)
#include <cstdarg>
void PrintVarioubleInt(int count, ...){
va_list argptr;
va_start(argptr, count);
for(int i=0; i<count; i++){
cout<<va_arg(argptr, int)<<" ";
}
va_end();
}
void main(){
PrintVarioubleInt(3, 1, 2, 3);
// >1 2 3
}
- va_list: 전달받은 가변인자 list를 가리키는 포인터
- va_start(): va_list가 특정 위치를 가리킴
- va_arg(): va_list가 가리키는 위치부터 자료형 크기만큼 데이터를 읽어서 반환
- va_end(): va_list가 가변인자 list 시작을 가리킴
2. RESULT
- 실습
//하루 일과
//9시까지 내배캠 입실하기
//8시에 일어나서 지각하지 않음
// 9시부터 수업
//아침을 먹지 않아 배고픔
//배고파서 1시에 점심을 먹을 것임.
//2시에 다시 수업 시작
#include <iostream>
using namespace std;
void EatLunch(bool& hungry) {
cout << "13시 점심 식사" << endl;
hungry = false;
}
void Learning(int& time) {
if (time <= 9) {
cout << "9:00~13:00 C++ 문법 1주차 수강" << endl;
}
else if (time == 14) {
cout << "14:00~18:00 C++ 문법 1주차 수강" << endl;
}
}
void GoNBC(int& time) {
Learning(time);
time = 13;
}
void WakeUp() {
int wakeUpTime;
int time=0;
cout << "몇시에 일어났나요?: ";
cin >> wakeUpTime;
if (wakeUpTime <= 9) {
time = wakeUpTime;
GoNBC(time);
}
else {
cout << "지각!!!" << endl;
}
bool hungry = true;
if (hungry && time == 13) {
EatLunch(hungry);
time = 14;
}
if (time == 14) {
Learning(time);
}
}
int main() {
WakeUp();
return 0;
}
- 도전 실습
#include <iostream>
using namespace std;
struct Stats
{
int HP;
int MP;
};
void IncreaseHP_Value(Stats Stat)
{
//여기서는 +10을 더합니다.
Stat.HP += 10;
//값을 복사하여 변경 후 함수가 끝나면 폐기되기 때문에 원본에 영향을 주지 않음.
}
void IncreaseHP_Ptr(Stats* Stat)
{
//여기서는 +20을 더합니다.
Stat->HP += 20;
//포인터로 주소를 통해 원본 값에 접근하여 변경함.
}
void IncreaseHP_Ref(Stats& Stat)
{
//여기서는 +30을 더합니다.
Stat.HP += 30;
//레퍼런스로 원본 값에 접근하여 변경함.
}
int main(int argc, char* argv[])
{
Stats stat;
stat.HP = 10;
stat.MP = 0;
IncreaseHP_Value(stat);
cout << "Value - HP: %d\n" << stat.HP << endl;
IncreaseHP_Ptr(&stat);
cout << "Ptr - HP: %d\n" << stat.HP << endl;
IncreaseHP_Ref(stat);
cout << "Stat - HP: %d\n" << stat.HP << endl;
return 0;
}
- 도전X도전 실습
#include <iostream>
#include <cstdarg>
using namespace std;
int calculateAverage(int count, ...) {
va_list lst; //가변 인자의 시작 주소를 저장하는 포인터
int sum = 0; //합
va_start(lst, count); //va_list의 시작 설정(count 다음부터 시작)
for (int i = 0; i != count; i++) {
sum += va_arg(lst, int);
//가변인자 리스트에서 현재 인자를 반환 > 인자 타입의 크기만큼 주소를 증가 > 그 다음 인자로 넘어감
}
va_end(lst); //초기화 전 상태로 돌림
return sum / count;
}
int main() {
// 인자개수, 인자 ...
cout << calculateAverage(5, 50, 80, 57, 95, 45)<< endl;
return 0;
}

3. 참고
https://woo-dev.tistory.com/53
[C++] 가변 인자(Variable argument) 사용법을 알아보자
가변 인자(Variable argument)란 말 그대로 고정되지 않은 인자를 말한다. C언어의 printf() 함수처럼 정해지지 않은 개수의 인자를 받아야 할 때 사용한다. 가변 인자는 아래와 같이 인자를 ... 표시로
woo-dev.tistory.com
https://eastroot1590.tistory.com/entry/%EA%B0%80%EB%B3%80%EC%9D%B8%EC%9E%90
C/C++ - 가변인자 ...
개요C 또는 C++언어에서 함수의 매개변수를 가변적으로 전달하고자 하는 경우가 있다.그 경우의 수가 많지 않거나 가변적이지 않을 때는 함수 오버로딩으로 작성하여 해결할 수 있다. 함수의 매
eastroot1590.tistory.com
- Call by Value, Call by Reference의 차이점
- Call by Value: 함수가 인수로 전달받은 값을 복사하여 처리, 원본 값 변경 X
- Call by Reference: 함수가 인수로 전달받은 변수의 참조 값을 함수 내부로 전달, 원본 값 변경 O
- 리터럴: 변하지 않는 값, 데이터 그 자체
'내배캠Unreal_TIL > C++' 카테고리의 다른 글
| [C++] Google C++ Style Guide, 구글 코드 컨벤션 (1) | 2025.12.11 |
|---|---|
| [TIL] 2025-12-11 | C++ 객체지향 프로그래밍, 상속과 다형성 (0) | 2025.12.11 |
| [TIL] 2025-12-10 | C++ 포인터와 레퍼런스, 클래스와 생성자 익히기, 멤버 초기화 리스트 (0) | 2025.12.10 |
| [TIL] 2025-12-09 | C++ 난수 생성, string 클래스와 getline(), 화면 초기화 (0) | 2025.12.09 |
| [TIL] 2025-12-05 | C++ 프로그래밍 기초, strtok 함수 (0) | 2025.12.05 |