4분 33초 경에 질문이 있습니다.
391
작성한 질문수 21
&arr[0][0]은 그냥 주소값이지 포인터가 아니지 않나요? 너무 헷갈립니다..ㅠ
주소값에다 정수를 더해서 너무 혼란스럽습니다... 이게 포인터면 +1을 하면 int 크기만큼 건너뛴다는건 알겠는데 저건 주소값인데 +1을 할 수 있는건가요?
답변 3
2
제가 말하는게 맞는지 궁금해요. 어느 정도 정리된 것 같기는 한데ㅠ
arr, arr[0], &arr[0]은 모두 포인터이다.
arr은 arr[0]을 가리키는 포인터이고, 포인터 타입은 int*[3]이다.
arr[0]은 arr[0][0]을 가리키는 포인터인 동시에(이때 포인터 타입은 int*) 행의 배열의 원소 중 하나이다. ( 이 때 왼쪽 인덱스를 따르는 배열을 뭐라 하는지 궁금해요ㅠㅠ 행배열이라고 밖에 표현을 못하겠어서;;)
&arr[0]은 arr[0]의 주소를 "명시"하는 표현이며, 이것은 int*[3]타입의 포인터이다.
귀찮게 해드려서 죄송합니다..ㅠㅠ
0
괜찮습니다.
거의 정확하게 이해하고 계신 것 같습니다!
1과 2 에 대해서 좀 더 정확하게는 arr 과 같은 배열의 이름은, 배열의 시작 주소를 가리키는 포인터와 호환이 되는 형태라는 표현이 더 정확합니다. arr 자체는 포인터가 아니라, 배열의 이름입니다. (메모리 주소를 가지고 있지 않은)
다만, arr 타입이 포인터 연산에 사용되거나, 함수에 전달될 때 int (*)[3] 타입의 포인터로 암시적 변환이 되는 것입니다.
3 번 질문에 대해서는 말씀하신 것 처럼 '행 배열' 로 표현하셔도 괜찮고, 혹은 2차원 arr 배열의 첫 번째 원소 배열 이라고 표현하셔도 괜찮다고 생각합니다.
그 외의 내용에 대해서는 모두 정확하십니다!!!
2
안녕하세요, 질문&답변 도우미 Soobak 입니다.
배열의 이름은 포인터와 호환이 되는 형태로, 포인터 연산이 가능합니다.
즉, arr 은 배열의 이름이자, 포인터 연산이 가능한 포인터로 사용될 수 있으며,arr == arr[0] == &arr[0] == &arr[0][0] 으로, &arr[0][0] 역시 int 형 변수의 주소를 나타내는 포인터로 사용이 가능합니다.
따라서, +1 연산을 하면, int 자료형의 크기인 4 바이트 만큼 이동하여 &arr[0][1] 를 가리키게 됩니다.
배열의 이름은 포인터와 호환이 되는 형태로 사용이 가능하기 때문에 포인터 연산이 가능한 것입니다.
1
그냥 배열명이 들어가 있고 &가 붙으면 포인터가 되는 것인가요?
1
배열의 이름 자체는 '배열의 첫 번째 원소를 가리키는 주소' 로 해석되며, 포인터처럼 사용할 수 있는 '포인터와 호환이 되는 형태' 입니다.
이 때, 배열의 이름에 & 을 붙이면, 배열 전체의 주소를 나타내는 포인터를 반환합니다.
예를 들어, &arr[0] 은 배열의 첫 번째 원소의 주소를 가리키는 int* 타입의 포인터가 됩니다.
또한, &arr 은 int (*)[5] 타입의 포인터가 됩니다.
즉, 배열의 이름 자체는 배열의 첫 번째 원소의 주소를 나타내며, 포인터 연산에 사용될 때 포인터처럼 동작합니다. 또한, & 는 변수나 배열의 메모리 주소를 가리키는 포인터를 반환합니다.
0
좀 더 자세히 답변을 드리면 다음과 같습니다.
arr
:arr은 배열의 이름이므로, 배열의 첫 번째 원소의 주소, 즉,arr[0]을 가리키는 것으로 해석됩니다.
예를 들어,int arr[2][3]에서arr은arr[0]의 주소를 가리키는 포인터와 호환이 되는 형태로 사용될 수 있습니다.
arr[0]
:arr[0]은arr배열의 첫 번째 '행' 을 나타내며, 이것 자체가 또 다른 배열입니다.
즉,int arr[2][3]에서,arr[0]은int[3]타입의 첫 번째 행을 나타내는 배열입니다.
이 때,arr[0]자체는 배열을 가리키는 표현임과 동시에, 배열의 이름으로 사용될 때는 해당 배열의 첫 번째 원소의 주소(즉,arr[0][0]의 주소)를 가리키는 포인터와 호환이 되는 형태가 됩니다.
&arr[0]
:&arr[0]은 첫 번째 행의 주소를 명시적으로 나타냅니다.
이 때,&arr[0]은int (*)[3]타입으로,3개의int를 가진 배열을 가리키는 포인터 로 사용됩니다.
즉,arr[0]과&arr[0]모두arr배열의 '첫 번째 행의 시작 주소' 를 가리키게 됩니다.
(arr[0]이 배열의 이름으로 사용될 때, 해당 배열(첫 번째 행)의 시작 주소를 의미하게 되고,&arr[0]은 첫 번째 행 자체의 주소를 명시적으로 나타내기 때문)
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
43
3
main 함수에서 왜 int만 선언이 되는걸까요
1
51
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
52
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
46
1
프로토타입과 함수간의 인자 불일치
1
72
2
12.12 헤더 관련 질문
1
59
2
Visual Studio Community 2026 사용 문의
1
132
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
59
2
getchar(), putchar()
1
92
3
강의자리ㅛ
1
78
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
112
2
소스파일안에 여러 파일
1
74
2
F5와 F7의 차이
1
75
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
52
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
11.5 코드 구현
1
66
2





