inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

10.13 포인터의 배열과 2차원 배열

int* 만큼 이동한다는 말의 뜻이 궁금합니다.

해결된 질문

301

정진호

작성한 질문수 13

2

안녕하세요,

이전 질문글의 답변에서 궁금한 점이 있어 질문드립니다. 링크는 https://www.inflearn.com/course/lecture?courseSlug=following-c&unitId=28273&tab=community&category=questionDetail&q=1142021
이고, 스샷으로 가져왔습니다. 밑줄 친 부분이 이해가 잘 가지 않는데요,

밑줄.jpg

arr 배열의 원소타입이 int 이므로 , arr + 1 은 arr[1]을 가리키는 포인터의 위치로 이동한다는 건 잘 알겠습니다.
arr, 즉, arr[0]의 주소가 만약 100이면 104 로 이동하겠죠. int 크기가 4바이트니까요.

그렇다면, parr + 1도 int* 크기만큼 이동해야 할 것 같은데요, int* 는 주소값을 저장하는 타입이므로 주소값의 크기인 4바이트(혹은 운영체제에 따라 8바이트) 만큼 이동해야 할 것같은데, 하기 첨부한 그림을 보면 parr[0] 시작 주소 부터 parr[1] 시작 주소까지 12바이트를 이동합니다.

직관적으로는 그럴것 같은데 헷갈려서 질문드립니다. 감사합니다.

 

c

답변 1

2

Soobak

안녕하세요, 질문&답변도우미 Soobak입니다.

 

포인터를 원소로 갖는 배열(포인터의 배열)에서, 포인터 원소의 주소(포인터 변수의 주소)와 포인터 원소가 가리키는 주소(포인터 변수의 값)는 다르다는 부분을 생각해보시면 이해에 도움이 되실 것 같습니다.👍

 (첨부해주신 강의 그림에서는, parr[0] 의 주소와 parr[0] 이 가리키는 주소, parr[1]의 주소와 parr[1]이 가리키는 주소 의 구분)

 

 

또한, 링크해주신 질문 글은 해당 강의 9:20 부분,

int arr0[3] = {1, 2, 3};

int arr1[3] = {4, 5, 6};

int* parr[2] = {arr0, arr1}

 

으로 선언된 parr 에 대한 내용으로, 질문해주신 2차원 배열에 대한 포인터 연산과 조금 다른 경우입니다.

1

정진호

수박님 안녕하세요, 답변주신 내용 중 궁금한게 있어 질문드립니다.

image.png여기서 parrr[0]의 주소와 parr[0]가 가리키는 주소를 생각해보라고 하셨습니다.

포인터 원소가 가리키는 주소와 포인터 변수의 값이 같다고 하셨습니다. 하지만,

parr은 포인터 변수의 배열로 선언되었기 때문에 각 원소가 포인터 변수이여야 하나, parr의 원소들인 arr[0]와 arr[1]은 포인터 변수가 아니지 않나요? 다만 arr이 배열이기때문에 포인터 변수와 호환이 되는 형태로 쓰는 것 아닌가요? 포인터 '변수'가 아닌데 어떻게 주소를 갖는건지 모르겠습니다.

1

Soobak

안녕하세요,

 

parr 의 각 원소는 int* 타입의 포인터입니다.

parr[0]parr[1] 은 포인터 변수입니다.

arr0arr1 은 말씀하신 것처럼 배열의 첫 번째 원소의 주소를 나타내는 포인터와 호환이 되는 형태이기 때문에, parr[0] 에는 arr0 의 주소가 저장되고, parr[1] 에는 arr1 의 주소가 저장됩니다.

Export template 안됨

1

20

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

54

3

main 함수에서 왜 int만 선언이 되는걸까요

1

56

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

54

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

138

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

61

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

80

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

114

2

소스파일안에 여러 파일

1

76

2

F5와 F7의 차이

1

77

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

70

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

75

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

61

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

65

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2