inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

콜백 함수

코딩을 하다 배열 포인터에 대한 질문이 생겼습니다.

342

pubtec59
0

#include <stdio.h>

int main(void)
{
	const int arr[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
	const int (*pa)[4] = arr;

	for(int i = 0; i < 3; ++i)
	{
		for(int j = 0; j < 4; ++j)
		{
			printf("%5d ", pa[i][j]);
		}
		printf("\n");
	}

	return 0;
}

코드에서 const int (*pa)[4]를 arr 주소로 값을 초기화한 다음 출력을 하면 정상적으로 출력되는 것을 확인할 수 있는데요,

메모리 창의 정보는 다음과 같습니다.

0x00D5FAB8  cccccccc  ????
0x00D5FABC  cccccccc  ????
0x00D5FAC0  cccccccc  ????
0x00D5FAC4  00d5fad0  ???.
0x00D5FAC8  cccccccc  ????
0x00D5FACC  cccccccc  ????
0x00D5FAD0  00000001  ....
0x00D5FAD4  00000002  ....
0x00D5FAD8  00000003  ....
0x00D5FADC  00000004  ....
0x00D5FAE0  00000005  ....
0x00D5FAE4  00000006  ....
0x00D5FAE8  00000007  ....
0x00D5FAEC  00000008  ....
0x00D5FAF0  00000009  ....
0x00D5FAF4  0000000a  ....
0x00D5FAF8  0000000b  ....
0x00D5FAFC  0000000c  ....

메모리를 뒤져봐도 pa는 0x00D5FAC4라는 arr의 주소 값을 갖고 있지 4라는 값(열 정보)에 대한 정보는 찾아볼 수가 없는데 어떻게 pa[i][j] 이런 식으로 접근이 가능한건가요?

뭔가 메모리를 까보니 더 아리송해진 상황입니다.

c++

답변 1

1

Rookiss

원래 배열을 사용할 때 int arr[3]; 을 만들었다 하더라도
메모리엔 3이라는 열에 대한 정보가 들어가진 않습니다.
컴파일 타임에 C++에서 그렇게 메모리 크기를 잡아주는 코드를 만들 뿐이죠.
image위와 같이 보시면 조금 더 이해하기가 편할겁니다.
pa 는 단순히 주소값을 가리키는 포인터에 불과하고,
[4개의 정수가 모인 배열] 타입을 가리키고 있습니다.
pa[0], pa[1] 등으로 ArrayType을 큼지막하게 넘어갈 수 있고
ArrayType 내부의 각 데이터를 다시 [j]로 접근할 수 있겠죠.
사실 i < 3, j < 4와 같은 정보가 아니라 i < 10, j < 10와 같은 코드를 넣어도
컴파일엔 아무 문제가 없습니다 (다만 런타임에 크래시 날 확률이 '꽤' 높겠죠)

0

pubtec59

답변 감사합니다! 그렇다면 <타입>에 [4]라는 정보가 들어간다고 이해하면 될까요?

1

Rookiss

네 그렇게 볼 수 있습니다. 어쨌든 C++ 관점에선 배열의 크기가 다르면 아예 다른 타입이기 때문이죠.

학습법

0

36

1

코테 관련 질문

0

58

2

코테 준비 방법 문의

0

57

1

공부 시작..

0

46

1

방산 SW 개발자가 되기 위한 조언을 부탁드립니다!

1

187

1

고민이있습니다...!

0

160

1

FPS 서버 충돌 질문드립니다.

0

121

1

재귀함수 코드를 작성하는 단계가 어렵습니다.

0

238

0

계속 공부해도 되는지 모르겠습니다

0

454

3

진로가 큰 걱정입니다...

0

324

1

구현 유형 추천문제

0

330

1

c++코드 구현 후 리슨서버의 Lobby에서 닉네임이 안바뀔 경우

0

301

0