inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

10.9 포인터 연산 총정리

3분 15초 경에 제 생각이 맞는 건가요?

해결된 질문

316

용개형멋져

작성한 질문수 37

3

int arr[5] = { 100, 200, 300, 400, 500 };

int* ptr1, * ptr3;

ptr1 = arr;

ptr3 = ptr1 + 4;

일 때

배열의 이름은 배열의 첫 번째 공간의 주소이다. 라고 한다면
ptr1은 arr[0]을 가리킨다.
ptr1 = arr
arr == &arr[0]
이라서 ptr1 + 4는 &arr[0] + (arr[0]의 자료형인 int의 크기) * 4 이고

 

배열의 이름은 배열의 첫 번째 공간의 주소를 가리키는 포인터와 비슷한 무언가이다. 라고 한다면
ptr1은 arr을 가리키고 arr은 arr[0]을 가리킨다.
ptr1 = &arr
&arr != &arr[0]
라서 ptr1은 arr[0]을 직접 가리키는 게 아니라 arr을 직접 가리키는거고
ptr1 + 4는 &arr + (arr의 자료형의 크기) * 4
인데 arr은 포인터와 비슷한거지 포인터가 아니라
주소도 없고 자료형도 없는데 여기서 뭔가 말이 모순되는 것 같고

 

계산 결과를 보면 후자는 절대로 아닌거 같은데
배열의 이름은 배열의 첫 번째 공간의 주소를 가리키는 포인터와 비슷한 무언가이다.
라는 표현은 맞는 표현 아닌가요?
맞는 표현인데도 불구하고 포인터와 비슷한 무언가라고 생각하고
ptr1 + 4를 하면 결과가 잘못되는 게 뭔가 아닌거 같아요.

 

제 생각의 어떤 부분이 뭐가 잘못된 거죠?

c

답변 1

3

Soobak

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

 

배열의 이름은 말씀하신대로 배열의 첫 번째 공간의 주소를 가리킵니다.
하지만, 배열의 이름이 실제 포인터 변수는 아닙니다.

 

배열의 이름은 포인터와 유사하게 작동하지만, 주소를 가리키는 상수 형태이며, 그 자체로 주소를 변경할 수 없습니다.
반면, 포인터 변수는 주소를 변경할 수 있습니다.
또한, 배열의 이름은 스스로 별도의 메모리 공간을 가지고 있지 않습니다.

 

질문해주신 코드에서, &arr 은 전체 배열의 주소를 나타내며, 타입은 int (*)[5] 입니다.
반면, &arr[0] 은 배열의 첫 번째 원소의 주소를 나타내며, 타입은 int* 입니다.
두 표현은 같은 메모리 위치를 가리키지만, 타입이 다릅니다.

 

이를 바탕으로 ptr1 + 4 포인터 연산을 했을 때, 해당 연산은 배열의 다섯 번째 요소(인덱스 4)의 주소를 가리키게 됩니다.

Export template 안됨

1

17

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

137

2

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

1

61

2

getchar(), putchar()

1

93

3

강의자리ㅛ

1

79

2

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

1

113

2

소스파일안에 여러 파일

1

75

2

F5와 F7의 차이

1

76

2

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

1

58

2

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

1

68

1

Step over 기능 문의

1

53

2

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

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

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

1

62

2

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

1

64

2

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

1

53

2

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

1

53

2