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
- & 연산자를 사용하면 레퍼런스를 생성함
- 원본의 별명을 지어주는 것과 같음
'언리얼 엔진 > 개념 정리' 카테고리의 다른 글
| 개념 정리 - C++(포인터와 레퍼런스) (0) | 2026.07.09 |
|---|---|
| 개념 정리 - C++(조건문과 반복문) (0) | 2026.07.08 |
| 개념 정리 - C++(변수와 입출력) (0) | 2026.07.08 |
| 개념 정리 - 애니메이션 리타기팅 (0) | 2026.07.01 |
| 개념 정리 - 래그돌 (Ragdoll) (0) | 2026.06.30 |