inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

arr[0]=&arr[0]의 주소가 왜 같은지 질문드립니다!

642

harypoteck

작성한 질문수 7

0

안녕하세요 선생님 강의 듣다가 잘 이해가 안가서 질문을 드립니다.
강의도중 이런 예시가 나왔습니다.
int arr[2][3] = { {1,2,3},{4,5,6} }; printf("%p %p %p", arr, arr[0], &arr[0]); arr[0]=&arr[0]
여기서 앞에 arr과 arr[0]의 주소가 같은거는 잘 이해가 되지만 이것들과 뒤에 &arr[0]의 주소가 같은 이유를 잘 모르겠습니다.
강의도중 그 이유를 말씀해주셨지만 그것만으로는 잘 이해가 가지 않아서 질문드립니다.
제가 생각하기에는 배열은 포인터의 역할을 수행하니깐 arr과 &arr[0]은 이중포인터가 되는거 아닌가요?
즉 arr[0]의 값이 들어있는 주소가 아닌 arr[0]의 주소를 담고있는 포인터의 주소라고 생각이듭니다

c

답변 1

1

안소

안녕하세요. 질문의 출처가 되는 연관 강의를 꼭 기재해주실 것을 부탁드립니다. :)

연관 강의를 적어주지 않으셔서 질문자님께서 어디까지 강의를 들으셨는지 모르겠지만..! 배열의 이름에 & 가 붙어도 "배열의 이름의 주소"가 되는 것이 아닌!! 값은 배열 이름과 그대로 동일합니다. 강의에서 배열 이름에 & 붙여도 그대로 배열 이름 값이라고 배우셨을거에요. 혹은 앞으로 배우시거나요..!

arr 가 배열 이름이라면 arr 와 &arr 은 값이 같습니다. 배열의 이름의 주소는 그냥 배열의 이름값일 뿐입니다. 포인터의 포인터, 즉 이중 포인터로 처리 되지 않아요. 배열의 이름은 포인터처럼 값을 맘대로 바꿀 수 있는 그런 "변수"가 아니기 때문입니다. 이러한 특수성때문에 이런 현상이 발생하는 것이라고 생각해주시면 될 것 같아요 :)  우리가 int a = 3; 으로 한다면 이 3 이라는 값의 주소는 개발자가 알 수가 없죠? 변수도 아닐뿐더러 접근도 불가능합니다. 배열 이름도 그러한 맥락이라고 생각해주시면 됩니다.  

(arr[0] 은 {1,2,3} 배열의 이름이나 마찬가지라고 보시면 됩니다. 그러니 arr[0] = &arr[0] 인거에요!)

Export template 안됨

1

65

2

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

1

91

3

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

1

81

2

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

1

75

2

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

1

78

1

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

1

87

2

12.12 헤더 관련 질문

1

74

2

Visual Studio Community 2026 사용 문의

1

171

2

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

1

72

2

getchar(), putchar()

1

111

3

강의자리ㅛ

1

93

2

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

1

127

2

소스파일안에 여러 파일

1

87

2

F5와 F7의 차이

1

90

2

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

1

67

2

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

1

78

1

Step over 기능 문의

1

65

2

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

1

87

2

int main 함수 관련 오류 문의

1

76

2

13.4 words[0]

0

73

2

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

1

67

2

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

1

71

2

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

1

61

2

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

1

59

2