언리얼 엔진/개념 정리

개념 정리 - C++(배열과 함수)

journey46110 2026. 7. 8. 16:23

I. 배열 (Array)

1) 배열의 정의

- 같은 자료형의 여러 데이터를 하나의 이름으로 관리하는 자료구조

 

배열을 사용하지 않을 때

int score1;
int score2;
int score3;
int score4;
int score5;

 

배열을 사용할 때

int score[5];

- 효율적인 관리 가능

 

2) 배열의 구조

int score[5];

자료형 int

변수 이름 score

원소 개수 [5]

 

메모리 내부 모습

score
┌────┬────┬────┬────┬────┐
│           │          │           │          │           │
└────┴────┴────┴────┴────┘
   0             1            2           3           4

 

 

3) 인덱스 (Index)

- 배열은 0부터 시작함

score[0] = 90;
score[1] = 85;
score[2] = 100;
score[3] = 70;
score[4] = 95;

세 번째 점수가 100이 됨

 

 

4) 임의 접근

- 배열은 원하는 위치로 바로 접근할 수 있음

score[4]

바로 5번째 점수를 불러올 수 있음

 

 

5) 배열의 초기화

① 선언과 동시에 초기화

int score[5] = {90,80,70,60,50};

 

② 전부 0으로 초기화

int score[5] = {};

 

 

6) 배열의 입출력

① 입력

- 배열은 변수처럼 한 번에 복사할 수 없어서, 반복문을 써서 일일히 대입해줘야 함

불가능

int score1[2] = {80, 90};

int score2[2];

score2 = score1; //불가능

 

가능

for(int i=0;i<5;i++)
{
    cin >> score[i];
}

 

② 출력

for(int i=0;i<5;i++)
{
    cout << score[i] << endl;
}

 

 

7) 배열의 길이

- 배열의 크기는 자료형의 크기 x 인덱스의 개수임

- 배열의 크기를 인덱스 하나의 크기로 나누면 배열의 길이가 됨

sizeof(score) / sizeof(score[0])

 

예시

int scoreLength = sizeof(score) / sizeof(score[0]);

 

 

8) 성적 관리 프로그램 구현

① 변수 선언

double score[5];

 

② 입력

cin >> score[0];
cin >> score[1];
cin >> score[2];
cin >> score[3];
cin >> score[4];

 

③ 연산

totalScore += score[0];
totalScore += score[1];
totalScore += score[2];
totalScore += score[3];
totalScore += score[4];

avgScore = totalScore / 5

 

④ 출력

cout << "총점: " << totalScore << endl;
cout << "평균: " << avgScore << endl;

 

⑤ 예시

#include <iostream>

using namespace std;

void gradeArray(void) {
	const int studentCount = 5;
	double score[studentCount] = {};
	double totalScore = 0;            //총합
	double avgScore;                  //평균

	for (int i = 0; i < studentCount; i++) {
		do {
			cout << i + 1 << "번째 학생 점수를 입력하세요 (0~100): ";
			cin >> score[i];

			if (score[i] < 0 || score[i] > 100)
				cout << "잘못된 점수입니다. 0~100 사이의 점수를 입력하세요" << endl;
		} while (score[i] < 0 || score[i] > 100);
		totalScore += score[i];
	}

	avgScore = totalScore / studentCount;

	cout << "총점: " << totalScore << endl;
	cout << "평균: " << avgScore << endl;
}

 

 

II. 함수 (Function)

1) 함수의 정의

- 특정 작업을 수행하도록 이름을 붙인 코드 묶음

 

예시 - 두 수를 더하는 작업

int add(int a, int b)
{
    return a+b;
}

 

호출

add(3, 5);

 

 

2) 함수를 사용하는 이유

- 반복되는 코드를 여러 번 쓰는 대신, 한 번만 만들어 놓고 계속 쓸 수 있음

 

장점

① 코드 재사용 가능

② 유지보수 쉬움

③ 가독성 향상

 

 

3) 함수의 구성

int add(int num1, int num2)
{
    return num1 + num2;
}

반환형 int

함수 이름 add

매개변수(Parameter) int num1, int num2

내부 코드 { return num1 + num2; }

 

 

4) 함수 호출

int result = add(3,5);

3과 5를 인자로 add 함수를 호출해서 8을 return함

 

 

5) 반환값이 없는 함수

void Print()
{
    cout<<"Hello";
}

- 반환형이 void인 함수는 아무 것도 반환하지 않음

- return 생략

 

 

6) 값 전달 방식

① 값 전달 (Call by Value) - 원본 변경 X

void AddOne(int x)
{
    x++;
}

int num=10;

AddOne(num);

결과 num = 10

- 인자로 변수를 넘겨주면 값을 복사해서 전달하는 방식이라 num이 변하지 않음

 

② 주소 전달 (Call by Address) - 원본 변경 O

void AddOne(int* x)
{
    (*x)++;
}

int num = 10;

AddOne(&num);

결과 num = 11

- 인자로 원본 변수의 메모리 주소를 넘겨주고, 함수 내부에서 포인터 연산자를 통해서 메모리 주소에 접근해서 값을 바꿈

 

③ 배열 전달 - 원본 변경 O

void Print(int* ptr)
{
    ptr[0] = 4;
}

int arr[4] = {1, 2, 3, 4};

Print(arr);

결과 arr[0] = 4

- 인자로 배열을 복사할 때, 배열 첫 번째 인덱스의 메모리 주소도 같이 복사함

- 이를 통해, 함수 내부에서 배열을 바꾸면 원본도 바뀜

 

④ 참조 전달 (Call by Reference) - 원본 변경 O

void AddOne(int& x)
{
    x++;
}

int num = 10;

AddOne(num);

결과 num = 11

- & 연산자를 사용하면 레퍼런스를 생성함

- 원본의 별명을 지어주는 것과 같음