인프런 커뮤니티 질문&답변

지혁김님의 프로필 이미지

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

배열 기초

배열 질문!

해결된 질문

21.05.28 13:04 작성

·

333

0

강의에서 배열이란것 자체가 시작위치를 가리키는 포인터라고 표현을 하셨는데 시작위치를 가리키고 있다는 것은 배열의 시작지점을 배열이란것이 주소 값을 통해 가지고 있는다라고 이해가되는데 

이런 의미라고하면 디버깅 모드에서 statinfo 라는 자료형의 monsters 배열을 메로리 검색해보면 바로 값이 내장되어있는 스택메모리의 위치가 보여지고 만약 monsters 배열이 배열의 시작주소를 가리키고 있다면 &monsters  검색하게된다면 가령 배열의 주소가

0x007AFB4C 이라면 (배열의 값을 가지고 있는주소임)

&monsters 는 0x007AFB4C를 가지고 있는 또하나의 메모리가 되어야 하는 건 아닌가요? 마치 포인터 처럼

예를들어 main 안에

int number = 0xaaaaaaaa;

int * ptr = &number;

일때 number 의 주소값이 ptr 이라는 포인터변수안에 들어가있고 디버깅을 찍어서 확인해보면 &ptr 메모리검색을해보면 실제로도 number 의 주솟값이 들어가 있는것을 알수있습니다.

물론 배열이란것자체가 주소값이기 때문에 포인터 변수에 대입가능하고 메모리 검색자체도 &를 붙이지 않아도 되고 주소값이라는 건 충분히 이해가 되었지만 배열이란것이 "처음 주소를 가리키고 있다" 라는 말이 이해가안됩니다. 

내부적으로 배열이 처음주소를 가리킨다면 그 처음주소를 가리키는 또다른 메모리가 존재를 해야하는것이아닌가요? 궁금해서 질문 드립니다.

답변 3

0

지혁김님의 프로필 이미지
지혁김
질문자

2021. 05. 28. 13:59

다음 강의를 들어보니 더 확실히 이해가되었네요!

0

지혁김님의 프로필 이미지
지혁김
질문자

2021. 05. 28. 13:42

감사합니다

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2021. 05. 28. 13:32

배열이라는 동일한 용어가 혼용되다 보니
설명을 좀 헷갈리게 드린 것 같네요.
- 배열 그 '자체'
- C++에서의 배열 문법
두가지로 구분해서 설명을 드리자면.

배열 '자체'로만 놓고 보면 [동일한 데이터 여러개가 모여있는 것]이고
int a[10]; 같은 배열을 만든다면
말 그대로 정수가 연속해서 10개 들어갈 공간(4*10바이트)이 할당이 됩니다.

단 C++에서의 배열 문법 int a[10]; 에서
[배열 이름]인 [a]는 [배열의 시작 주소]라는 두번째 의미를 갖고 있기 때문에
[배열이 처음 주소를 가리킨다]라고 표현을 한 것입니다.
따라서 int* ptr = a; 같은 식으로 포인터 마냥 사용할 수 있습니다.

하나 주의할 점은, 함수 인자로 void Test(int a[10])와 같은 식으로
넘길 경우에는 진짜 배열처럼 10개의 int가 할당되어 넘어가는게 아니라
정말 int*와 동일하게 동작해서 주소만 넘어가게 됩니다.