[TIL] 2025-12-08 | C++ 가변 인자

2025. 12. 8. 16:29·내배캠Unreal_TIL/C++
게임 개발자를 위한 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
'내배캠Unreal_TIL/C++' 카테고리의 다른 글
  • [TIL] 2025-12-11 | C++ 객체지향 프로그래밍, 상속과 다형성
  • [TIL] 2025-12-10 | C++ 포인터와 레퍼런스, 클래스와 생성자 익히기, 멤버 초기화 리스트
  • [TIL] 2025-12-09 | C++ 난수 생성, string 클래스와 getline(), 화면 초기화
  • [TIL] 2025-12-05 | C++ 프로그래밍 기초, strtok 함수
윤윤씨
윤윤씨
🎮 내일배움캠프 Unreal 7기
  • 윤윤씨
    컴퓨터온열맛사지
    윤윤씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (63) N
      • 내배캠Unreal_TIL (63) N
        • C++ (23)
        • UE (31)
        • 팀프로젝트 (8) N
      • etc (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Solved.ac
    • YouTube
  • 태그

    코드카타
    챌린지
    STL
    언리얼과제
    스테이트머신
    gas
    머티리얼
    프로그래머스
    ta
    디자인패턴
    오토마타
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
윤윤씨
[TIL] 2025-12-08 | C++ 가변 인자
상단으로

티스토리툴바