C++

C++ 배열과 namespace - 24.11.14

부어잉 2024. 11. 14. 19:53
반응형

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부터 시작한다.

- 배열의 이름만 단독적으로 쓰게 되면, 그 값은 배열의 값이 아닌 배열의 주소 값을 가지게 된다. 

 

 

arr 변수에 대한 접근

 

 

* 2차원 배열

 

int arr[4][3] ; 

- 처음 [ ]은 행을 의미하고, 두 번째 [ ] 은 열을 의미한다. 

- 즉 4개의 행과 3개의 열로 이루어진 배열을 만들면 된다.

 

2차원 배열에 대한 예시 그림

 

 

 

- 그러나 배열은 데이터 상에서는 일렬로 저장되어 있기 때문에, 주소값은 순서대로 이어진다.

 

arr[0][2] 다음에는 arr[1][0]의 주소가 차례로 이어진다.

 

 

 

* 문자의 배열

 

- 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
}
728x90