카테고리 없음

C++ 기초 - 배열, 함수

이개 2026. 3. 4. 17:04
  • 배열은 임의 접근이 가능하다.
  • 변수와 마찬가지로 배열은 선언과 동시에 초기화 및 선언 후 초기화 가능하다.
    • int arr1[3] = {1, 2, 3};
    • int arr2[3];
    • arr2[0] = 10;
    • arr2[1] = 20;
    • arr2[2] = 30;
  • 선언과 동시에 {0}으로 초기화할 수도 있다. {1, 2}로 일부만 초기화하고 나머지는 0을 넣을 수도 있다. 선언 후에는 이렇게 초기화할 수는 없다.
  • 배열은 통째로 복사 및 대입이 되지 않는다.
    • 복사하려면 for문으로 개별 원소를 복사한다.
  • 배열의 각 원소는 변수와 동일하게 cin과 cout을 통해 입출력 가능하다.

참고로 배열은 배열의 시작 주소값이지만 구조체는 값 타입으로 인식되기 때문에, 구조체는 통째로 대입이나 통째로 복사가 가능하다.

 

그리고 C에서는 구조체 선언 후에 대입이 안 되지만, C++에서는 가능하다. 그리고 C에서는 struct Date를 만들었으면 typedef를 쓰지 않는 이상 struct Date라고 꼬박꼬박 써줘야하지만, C++에서는 Date만 써도 된다.

구조체 (C)

 
struct Date d1;
d1 = (struct Date){2026, 3, 3}; // 가능
 

⚠️ 괄호 + 타입 지정 꼭 필요

❌ 이렇게는 안 됨

 
struct Date d1;
d1 = {2026, 3, 3}; // ❌ 에러

구조체 (C++)

선언과 동시에 초기화


struct Date {
int year;
int month;
int day;
};

Date d1 = {2026, 3, 3};

선언 후 대입

 
Date d1;
d1 = {2026, 3, 3}; // ✅ C++에서는 가능
 

👉 C와 달리 타입명 안 써도 됨

C에서는:

d1 = (struct Date){2026, 3, 3};

이렇게 써야 했음.

✅ 구조체 통째로 복사

 
Date a = {2026, 3, 3};
Date b;

b = a; // 가능
 

👉 멤버 전체 복사


❌ 배열은?

 
int a[3] = {1,2,3};
int b[3];

b = a; // ❌ C++에서도 안 됨
 

배열은 여전히 대입 불가.


🔥 하지만 C++에는 대안이 있음

1️⃣ std::array

 
#include <array>

std::array<int, 3> a = {1,2,3};
std::array<int, 3> b;

b = a; // ✅ 가능
 

2️⃣ std::vector

 
#include <vector>

std::vector<int> a = {1,2,3};
std::vector<int> b;

b = a; // ✅ 가능
 

C++에서는 배열 대신 컨테이너를 쓰는 이유가 이거.

 

함수

함수에서 값을 전달하는 방식은 크게 3가지

 

1. 값 자체를 전달하는 방식

  • 값 전달 시에는 값을 복사하여 함수로 전달한다.
  • void modifyValue(int x)

2. 주소값을 전달하는 방식

  • 주소값을 전달하면 해당 배열에 접근할 수 있게 된다. 따라서 함수가 종료된 이후에도 해당 배열의 값이 수정되어 있다.
  • void modifyValue(int* ptr) {}
  • 변수는 modifyValue(&num), 배열은 modifyValue(arr). 배열은 변수 자체가 주소값.

3. 참조자를 전달하는 방식

  • 참조자로 값을 전달하면 함수 내부에서 값을 변경할 때, 원본 변수의 값도 변경된다.
  • void modifyValueByReference int& x) {}
  • modifyValueByReference(num)