C++ 배열과 namespace - 24.11.14
C++ 배열, namespace
* 배열이란?
- 동일한 타입의 여러 값을 연속적으로 저장할 수 있는 데이터 구조.
- 메모리에서 연속적인 공간을 가지고 각 요소(데이터)는 인덱스를 통해 접근할 수 있다.
- 배열을 선언할 때, 지정된 크기를 변경할 수 없다. (고정 배열)
- 배열의 모든 요소는 동일한 데이터 타입을 가져야 한다.
- 연속된 공간에 저장되기 때문에 요소에 대한 인덱스 접근이 매우 빠르다.
- 선언 방식
자료형 배열이름[배열의 길이] = { 초기화 하려는 값 };
int arr[4] = {1,2,3,4}
초기화
- 크기를 생략하고 초기화할 수 있다.
- [ ] 안에 숫자를 넣지 않으면 초기화값을 기준으로 자동으로 크기가 설정된다.
int myArr[] = {1,2,3}; // myArr의 길이는 3
- 크기를 명시적으로 지정하고, 일부 요소만 초기화 할 수 있다.
- 초기화 하지 않은 값은 자동으로 0으로 초기화가 된다.
int myArr1[5] = {1,2,3}; // myArr1 = 1,2,3,0,0
- 모든 요소를 초기화하지 않으면 기본값 0으로 초기화된다.
접근
- 배열은 각 인덱스를 통해서 접근할 수 있다.
- [ ] 안에 원하는 인덱스를 넣으면 해당 배열의 값에 접근 가능하다.
- [ ] 안에는 다른 정수 타입의 변수를 넣어서 접근할 수도 있다.
int numbers[5] = {10,20,30,40,50};
cout << "arr[0]의 값 : "<< arr[0] << endl; //10
cout << "arr[0]의 주소값 : "<< &arr[0] << endl;
- 변수 앞에 & 를 사용하게 되면, 해당 변수가 저장된 메모리의 주소값을 알 수 있다.
- 인덱스는 무조건 0부터 시작한다.
- 배열의 이름만 단독적으로 쓰게 되면, 그 값은 배열의 값이 아닌 배열의 주소 값을 가지게 된다.
* 2차원 배열
int arr[4][3] ;
- 처음 [ ]은 행을 의미하고, 두 번째 [ ] 은 열을 의미한다.
- 즉 4개의 행과 3개의 열로 이루어진 배열을 만들면 된다.
- 그러나 배열은 데이터 상에서는 일렬로 저장되어 있기 때문에, 주소값은 순서대로 이어진다.
* 문자의 배열
- name은 문자열을 넣기 위한 배열. 크기가 6이지만, 자동으로 문자열 끝에 NULL값이 들어가기 때문에
6으로 크기를 지정해주어야 한다.
- 문자열은 null을 읽을 때까지 계속 문자열을 읽어낸다. NULL값을 읽어내면 그때 종료한다.
char name[6] = "hello"
char name1[] = { 'h','e','l','l','o'};
- name1은 단순한 문자 배열. 자동으로 NULL이 삽입되지 않는다.
- 따라서 null값을 따로 지정해주지 않으면, 초기화 하지않은 더미(dummy)값이 읽히게 된다.
결과값 :
*namespace
- 이름 충돌을 방지하고 코드의 구조를 더 명확하게 하기 위해 사용.
- 규모가 큰 프로젝트에서는 여러 라이브러리, 코드 모듈이 함께 사용된다.
- 동일한 이름의 함수, 클래스, 변수가 존재할 수 있는데 네임스페이스로 구분하여 충돌을 방지하는데 중요한 역할을 한다.
- 특정 이름을 네임스페이스 안에 넣어 독립적인 이름 공간을 만들어준다.
- 관련된 함수, 변수, 클래스를 네임스페이스 안에 모아두면 관리가 매우 용이하다.
형태
namespace MyNameSpace
{
변수, 함수, 클래스 등등이 들어갈 수 있다.
}
- namespace 안에 있는 요소에 접근하려면 " :: " 를 사용하면 된다.
#include<iostream>
using namespace std;
namespace Space1
{
int num = 1;
}
namespace Space2
{
int num = 2;
namespace Space3
{
int num =3;
}
}
int main()
{
cout<<Space1::num<<endl; //1
cout<<Space2::Space3::num<<endl; //3
}