[C++] 동적배열
동적배열은 동적할당(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 |