본문 바로가기
C++/뇌를 자극하는 C++

[C++] 챕터 9 - 배열 : 변수를 여러개 모아 놓은 변수

by Minkyu Lee 2023. 4. 25.

 

// 9-1 : 배열의 사용

int main()
{
    int kor_scores[5];
    kor_scores[0] = 100;
    kor_scores[1] = 88;
    kor_scores[2] = 92;
    kor_scores[3] = 40;
    kor_scores[4] = 76;

    return 0;
}

/*
변수를 몇개 만들어 대괄호 안에 적어준다.
*/

 

// 9-2, 3 : 100번째 원소에 접근하기, 원소의 탐색

int main()
{
    int kor_scores[5];
    kor_scores[100] = 100;

    return 0;
}

/*
접근위반하면 프로그램 갑자기 죽을 수 있다. (잘못된 원소에 접근)
올바른 범위 인덱스 사용은 개발자 책임이다.
*/

/*
--- 9-3 ---
원소 탐색법 알려준다.
for문 돌려서 원소 하나씩 출력하는게 전부다.
*/

 

// 9-4 : 배열의 초기화

#include <iostream>
using namespace std;

int main()
{
    int kor_scores[5] = { 100, 88, 92, 40, 76 };
    for (int i = 0; i < 5; i++)
    {
        cout << kor_scores[i] << "\n";
    }

    return 0;
}
/*
배열의 초기화. 한번에 가능하다.
배열의 크기보다 적게 입력되면, 입력되지 않은 값은 0으로 자동적으로 채워진다.

단, 아예 초기화 하지 않은 값은 쓰레기값을 가진다.

초기화시 배열 크기 지정하지 않아도 된다.

정의할 때 말고는 초기화 할 수 없다.

배열끼리 대입 불가능하다.
복사하고 싶다면 원소 하나씩 대입한다.
*/

 

// 9-5 : 배열의 원소 복사

int main()
{
    int arrayA[3] = { 1,2,3 };
    int arrayB[3];

    // 복사
    for (int i = 0; i < 3; ++i)
    {
        arrayB[i] = arrayA[i];
    }

    return 0;
}

/*
배열의 원소 복사
*/

 

// 9-6 : sizeof 연산자

#include <iostream>
using namespace std;

int main()
{
    double d;
    int i;
    char a;

    cout << sizeof(d) << "\n";
    cout << sizeof(i) << "\n";
    cout << sizeof(a) << "\n";
    cout << "------" << "\n";
    cout << sizeof(double) << "\n";
    cout << sizeof(int) << "\n";
    cout << sizeof(char) << "\n";

    return 0;
}

/*
sizeof는 타입의 크기를 바이트 단위로 반환한다.

--- 결과 ---
8
4
1
------
8
4
1
*/

 

// 9-7 : 배열의 크기 확인

#include <iostream>
using namespace std;

int main()
{
    // 배열 정의
    char cArray[3] = { 'A', 'B', 'C' };
    int iArray[4] = { 100, 200, 300, 400 };
    double dArray[5] = { 0.1, 0.2, 0.3, 0.4, 0.5 };

    // 출력
    cout << sizeof(cArray) << "\n";
    cout << sizeof(cArray[0]) << "\n";
    cout << sizeof(cArray) / sizeof(cArray[0]) << "\n"; // 원소의 개수

    cout << sizeof(iArray) << "\n";
    cout << sizeof(iArray[0]) << "\n";
    cout << sizeof(iArray) / sizeof(iArray[0]) << "\n"; // 원소의 개수

    cout << sizeof(dArray) << "\n";
    cout << sizeof(dArray[0]) << "\n";
    cout << sizeof(dArray) / sizeof(dArray[0]) << "\n"; // 원소의 개수

    return 0;
}

/*
배열의 크기와 개수를 알 수 있다.

--- 결과 ---
3
1
3

16
4
4

40
8
5

*/

 

// 9-8, 9 : 원소의 크기 10을 직접 적어준 경우, 원소의 크기를 컴퓨터가 계산한 경우

/*
예제 ex9-8은 스킵하였다.
for문에 배열의 원소 개수를 하드코딩 하였을 때,
코드 수정시 문제가 된다는 내용이다.
*/

#include <iostream>
using namespace std;

int main()
{
    // 배열 정의
    int array[] = { 1,2,3,4,5,6,7,8,9,10 };
    for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
    {
        array[i] *= 2;
    }
    return 0;
}

/*
원소 개수만큼 반복된다.
sizeof의 활용이다.

*/

 

// 9-10 : NULL 문자의 중요성

#include <iostream>
using namespace std;

int main()
{
    char ThisIsNotString[] = { 'H', 'E', 'L', 'L', 'O' }; // 문자의 배열
    char ThisIsString[] = { 'H', 'E', 'L', 'L', 'O', '\0' }; // 문자열

    cout << ThisIsNotString << "\n";
    cout << ThisIsString << "\n";

    return 0;
}

/*
--- 결과 ---
HELLO儆儆儆儆儆儆儆儆儆儆儆儆儆?ELLO
HELLO

-------
문자열은 마지막 문자가 반드시 \0 이어야 한다.
NULL문자라고 부른다. 이것은 약속이다.

문자열은 반복명령을 통해 처리된다.
종료 조건이 NULL을 만날때까지인 것이다.

따라서 NULL이 없으면 이상한 문자가 찍힌다.

*/

 

// 9-11 : 문자열 리터럴의 사용

#include <iostream>
using namespace std;

int main()
{
    char cArray1[] = "ABCDE"; // 문자열 상수로 배열 초기화
    char cArray2[] = { 'A', 'B', 'C', 'D', 'E', 0 }; // 0으로 써도 똑같다. 하지만 \0으로 쓰는 것이 일반적이다.

    // 크기 비교
    cout << sizeof(cArray1) << "\n";
    cout << sizeof(cArray2) << "\n";
   
    // 4,5번째 원소 출력 비교
    cout << cArray1[4] << (int)cArray1[5] << "\n";
    cout << cArray2[4] << (int)cArray2[5] << "\n";

    return 0;
}

/*
--- 결과 ---
6
6
E0
E0

------
쌍 따옴표 사용해 문자열 상수로 만든 경우,
자동으로 NULL이 붙는다.

두 배열은 크기와 내용이 완전히 동일하다.
*/

 

댓글