[C++] 동적배열

Programming/C++_C#|2017. 3. 30. 20:51
반응형

동적배열은 동적할당(new)을 배열로 한다는 것이다.

그냥 배열 쓰지 이걸 왜써? 하는 생각도 들겠지만

포인터변수(주소값)를 쓰기 때문에 다른 곳에서 주소값으로 이어놔서 이런저런 연산하기가 편하다.

또 구조체나 클래스같은 경우에도 포인터변수이기 때문에 왔다갔다 하면서(호출이나 인자값 등등) 쓰일 때 

4바이트만 이동시키면 되기 때문에 잘만 쓰면 

일반메모리를 들고 왔다갔다하는거보다 가볍고 더 좋다.




동적배열



일단 배열을 알아야되긴하는데 

배열에 대한 포스팅도 꼭 다음에.....//ㅅ//

동적할당은 저번 포스팅에 나왔다.

int* p = new int;

이런 식으로 포인터변수를 할당하는 것


그렇다면 동적배열은 아래와 같다.


예1)

int* p;

p = new int[5];

for( int i = 0; i < 5; ++i )

{

     p[i] = i;

     printf("%d", p[i]);

}


delete [] p;

p = NULL;




예2)

int* p = new int[5];

int* pTemp = p;


for( int i = 0; i < 5; ++i )

{

     *pTemp = i;

     printf("%d", *pTemp);


     if( i < 5-1 )                // 마지막 원소의 주소값에서는 ++할 필요가 없다.

          ++pTemp;

}


delete [] p;

p = NULL;


일단 포인터변수 p를 선언하고 new할당할 때 배열처럼 해당 자료형의 배열크기만큼 할당해준다.


예1처럼 각 p의 배열에 접근해 값을 넣는 방법이 있고

예2처럼 p의 포인터주소값을 ++로 다음 배열원소로 이동해서 값을 넣는 방법이 있다.


p의 포인터주소값을 pTemp에 넣는 이유는 p는 0번지(처음 주소) 그대로 두고

pTemp에 p의 첫번째 주소값 대입.

pTemp로 연산시켜(++ 및 주소 이동) delete할 때는 기존 0번지의 p값을 넣어주려고 하기 때문이다.(순서대로 삭제하기 위해)






여기까지가 동적배열의 개념이였다.

많이 쓰이니 new와 배열을 잘 알면 받아들이기 쉬울것이다.

감사합니다.






반응형

'Programming > C++_C#' 카테고리의 다른 글

[Map]의 insert에 대해 새로 알게 된 사실  (0) 2017.06.30
memmove함수  (0) 2017.04.05
[C++] new delete 할당과 해제  (0) 2017.03.30
[C++] 논리연산자  (0) 2017.03.24
memcpy함수  (0) 2017.03.23

댓글()