C++ 기초 익히기(1) - 변수와 배열

정채은·2025년 5월 27일

C++ 프로그래밍

목록 보기
1/16

🔴시작하기 전

Visual Studio 관련

1. 설치하기

https://visualstudio.microsoft.com/ko/vs/community/

2. 컴파일

  • CTRL+ F7

3. 코드 실행

  • F5

📦데이터를 담는 변수

📌변수 타입 알아보기

타입표현하는 데이터설명
int정수(양수,0,음수)소수점 X
float,double부동 소수소수점 O, 둘은 정밀도 차이
char단일 문자작은 따옴표로 한 문자 표현
bool논리값true 와 false
string문자열쌍 따옴표로 문자열 표현, <string> 헤더 필요
unsigned양수음수 입력 불가, 양수 범위가 2배

📌연산자

기본적인 대입(=), 사칙연산(+, -, *, /) 그리고 대소비교( >, <, >=, <=, !=, == )가 가능 하다. 주의해야할 점은 대입은 = 이고, 비교는 == 라는 점.

일반 연산

연산자간단 코드 예제설명
+int sum = 3 + 5;덧셈 (Addition)
-int diff = 10 - 4;뺄셈 (Subtraction)
*int product = 6 * 7;곱셈 (Multiplication)
/int quotient = 10 / 2;나눗셈 (정수 나눗셈 시 몫 반환)
%int mod = 10 % 3;나머지 연산 (Modulolo)

대입 연산자

연산자간단 코드 예제설명
==bool isEqual = (5 == 5);같음 (Equal to)
!=bool isNotEqual = (5 != 3);다름 (Not equal to)
>bool isGreater = (10 > 3);초과 (Greater than)
<bool isLess = (2 < 5);미만 (Less than)
>=bool isGreaterOrEqual = (4 >= 4);이상 (Greater than or equal to)
<=bool isLessOrEqual = (3 <= 7);이하 (Less than or equal to)

비교 연산자

연산자간단 코드 예제설명
=int a = 10;값 할당 (Assignment)
+=a += 5; -> a = a + 5;덧셈 후 대입
-=a -= 3; -> a = a - 3;뺄셈 후 대입
*=a = 2; -> a = a 2;곱셈 후 대입
/=a /= 4; -> a = a / 4;나눗셈 후 대입
%=a %= 2; -> a = a % 2;나머지 후 대입

💻전위 연산과 후위 연산

#include <iostream>

using namespace std;

int main() {
    int a = 5;
    int b = a++;  // 후위 증가: b에 먼저 a를 대입한 후 a 증가
    int c = ++a;  // 전위 증가: a를 먼저 증가시킨 후 c에 대입

    cout << "후위 증가 (b = a++):" << endl;
    cout << "b = " << b << ", a = " << a << endl; // b = 5, a = 7

    cout << "전위 증가 (c = ++a):" << endl;
    cout << "c = " << c << ", a = " << a << endl; // c = 7, a = 7

    return 0;
}

💻계산기 구현

void Calc() 
{
    int num1 = 0;
    int num2 = 0;

    cout << "첫 번째 숫자를 입력하세요 : ";
    cin >> num1;
    cout << "두 번째 숫자를 입력하세요 : ";
    cin >> num2;

    cout << "두 수의 합은 " << num1 + num2 << " 입니다." << endl;

}

📚 데이터를 여러개 담는 배열

📌배열 문법

배열은 동일한 타입의 여러 값을 한꺼번에 담을 수 있는 자료 구조이다.
예를 들어, 4명의 학생 점수를 저장하려면 네 개의 변수를 만드는 대신, 크기가 4인 배열 하나를 만들면 된다.

만약 네 개의 변수를 만드는 경우 실생활에 비유하면 과일 장사를 하는데 동일한 과일을 하나의 박스에 넣지 않는 것과 같다.

배열의 특징

  1. 배열은 임의 접근이 가능하다.
    예를 들어, int arr[4] 와 같이 크기가 4인 정수형 배열의 경우, arr[0]이 맨 처음 원소이고, arr[3]가 제일 마지막 원소이다.

  2. 변수와 마찬가지로 배열은 선언과 동시에 초기화 및 선언 후
    추후에 초기화가 모두 가능하다.


  3. 배열은 통째로 복사 및 대입이 되지 않는다.
    각 배열의 원소는 일반 변수와 같이 복사 및 대입이 가능하나, 배열 자체를 통째로 대입하는 것은 불가능하다.

  4. 배열의 각 원소는 변수와 동일하므로 cincout을 통해 입출력이 가능하다.

💻배열의 선언

#include <iostream>
using namespace std;

// 배열 선언과 초기화 예제
int main() {
    // 선언과 동시에 초기화
    int arr1[3] = {1, 2, 3};

    // 선언 후 개별 원소 초기화
    int arr2[3];
    arr2[0] = 10;
    arr2[1] = 20;
    arr2[2] = 30;

    // 배열 출력
    cout << "arr1: " << arr1[0] << ", " << arr1[1] << ", " << arr1[2] << endl;
    cout << "arr2: " << arr2[0] << ", " << arr2[1] << ", " << arr2[2] << endl;

    return 0;
}

/*
출력 예시:
arr1: 1, 2, 3
arr2: 10, 20, 30
*/

💻성적 관리 프로그램의 구현

void GradeManagement() {
    int score[5];
    int size = sizeof(score) / sizeof(score[0]);

    int total; // int total = 0; 으로 선언해야함.
    double avg ;

    for (int i = 0; i < size; i++) {
        cout << "[" << i << "] 학생의 점수를 입력하세요 : ";
        cin >> score[i];
    }

    for (int i = 0; i <size; i++) {
        total += score[i]; 
    }
    avg = total / size;

    cout << "총점은 "<< total<<"점, 평균은 " << avg <<"점 입니다.";
}

배열의 크기 구하기

int size = sizeof(score) / sizeof(score[0]);
배열 전체의 크기를 배열 요소의 크기 값으로 나눠주면 배열의 크기를 알 수 있다.

💡문제 해결

이대로 실행하면 오류가 난다.

avg는 멀쩡한데 왜 total은 버그가 나는것인가!
바로 total += score[i]; 이 부분에서 오류가 난 것인데,

🔴 int total은 초기화 안 하면 쓰레기 값으로 시작함

int total은 지역 변수라서 자동 변수이고, 자동 변수는 C++에서 초기값이 자동으로 0이 아님.

total += score[i];total = (쓰레기 값) + score[i]; 처럼 동작하기 때문에, 정상적인 값이 되지 않음.

컴파일러에 따라 경고나 오류가 뜨기도 한다.

🟡 double avg는 초기화 안 했지만 문제가 안 보인 이유

avg = total / size; 처럼 나중에 대입만 했기 때문에 초기화된 값을 쓰지 않았음.

즉, 사용 전에 값을 할당해주었기 때문에 초기화 값 (쓰레기 값)을 사용하지 않아 문제가 생기지 않았음.

결론은 지역 변수의 경우 초기값이 0이 아니기 때문에 값을 바로 할당 받는 게 아니라면 0으로 초기화 해줘야 되는데 그냥 오류 방지를 위해 0으로 초기화 해주는 습관이 필요할 거 같다.

내가 왜 이런 실수를 했나 생각해보니 유니티에서 전역 변수를 많이 써서 그 습관이 생긴 거 같다.

지역 변수 vs 전역 변수

항목지역 변수전역 변수
선언 위치함수 안함수 바깥
사용 범위선언된 블록 안에서만 사용 가능프로그램 전체에서 사용 가능
메모리 할당함수 실행 시 생성, 종료 시 제거프로그램 실행 시 생성, 종료 시 제거
초기화 필요❗ 반드시 초기화 필요 (자동 초기화 안 됨)✅ 자동으로 0으로 초기화됨.

초기화도 자동으로 해주는 전역 변수가 더 좋아보이는데 왜 지역 변수를 쓸까?

🔒 지역 변수를 사용하는 이유?

메모리 절약 : 함수 끝나면 사라지니까
코드 관리 용이 : 변수 이름 충돌 방지, 안전한 변수 사용.
버그 방지 : 한정된 범위에서만 사용되어 실수 줄임.

profile
누군가에게 추억을 만들어주는 그날까지

0개의 댓글