1차원 배열처럼 나타내는 부분을 맞게 이해한건지 모르겠어요
187
작성한 질문수 21
강의 예시에서의 2차원 배열 data가 있고 int* ptr = &data[0][0]으로 초기화시켰으니 ptr이 나타내는건 2차원 배열의 대표주소가 아닌 2차원 배열의 1행 1열의 원소를 직접 가리키는 것이 맞나요? 제가 이해한 바로는 배열명인 data에 포인터 산술연산을 가해서 1을 더하면 이것은 2번째 행에 해당하는 내부 배열의 대표주소를 가리키는 것이고 ptr에 1을 더하면 그냥 1차원 배열의 다음 원소인 1행 2열의 원소를 가리킨다고 생각하고 있는데 이게 맞는건지 궁급합니다.
답변 2
1
안녕하세요? 질문&답변 도우미 Soobak 입니다.
Q1. 강의 예시에서의 2차원 배열 data 가 있고, int* ptr = &data[0][0] 으로 초기화시켰으니, ptr 이 나타내는건 '2차원 배열의 대표 주소' 가 아닌 '2차원 배열의 1행 1열의 원소' 를 직접 가리키는 것이 맞나요?
: 네, 맞습니다.int* ptr = &data[0][0]; 으로 초기화하면, ptr 은 data 배열의 첫 번째 원소인 data[0][0] 의 주소를 가리키게 됩니다.
Q2. 제가 이해한 바로는 배열명인 data 에 포인터 산술연산을 가해서 1을 더하면, 이것은 2번째 행에 해당하는 내부 배열의 대표 주소를 가리키는 것이고, ptr 에 1을 더하면 그냥 1차원 배열의 다음 원소인 1행 2열의 원소를 가리킨다고 생각하고 있는데 이게 맞는 것인지 궁금합니다.
: 네, 잘 이해하고 계십니다.
data + 1 과 같이 배열명 data 에 포인터 산술 연산을 통해 1 을 더하면,data + 1 은 두 번째 행의 시작 주소 data[1] 을 가리킵니다.
반면, ptr + 1 을 수행하면, data[0][1] , 즉, 첫 번째 행의 두 번째 원소를 가리킵니다.
만약, 포인터 연산과 결과의 차이에 대해서 혼동이 있으시다면,
다음 내용들을 다시 점검해보시면 이해에 도움이 많이 되실 것 같습니다.
배열의 이름은 포인터와 호환이 되는 형태이다.
포인터 연산은 포인터의 자료형에 따라 다르게 수행된다.
data는int data[3][4]로 선언된 2차원 배열로, 배열의 이름이 포인터로 사용될 때는int (*)[4]의 자료형을 갖는다.반면,
ptr은int*로 선언된 포인터이다.
0
안녕하세요, 인프런 AI 인턴입니다.
강진성님의 질문에 대해 답변드립니다. 질문하신 내용을 정확히 이해하신 것입니다. int* ptr = &data[0][0];을 사용했을 때, ptr이 가리키는 것은 2차원 배열의 첫 번째 행, 첫 번째 열에 위치한 원소의 주소입니다. 이 때, 포인터 ptr에 1을 더하면(즉, ptr + 1), 메모리 상에서 다음 위치에 있는 원소, 즉 1행 2열의 원소를 가리키게 됩니다. 이러한 방식으로 포인터를 이동시켜 각 원소에 접근할 수 있습니다.
반면, 2차원 배열에서 배열명을 사용할 때, 예를 들어 data + 1을 하게 되면, 이는 첫 번째 행 전체를 건너뛰고 두 번째 행의 시작 주소를 가리키게 됩니다. 배열명은 대표 주소를 가리키기 때문에, 이렇게 포인터 산술 연산을 적용하면 행 단위로 이동하게 됩니다.
다음 링크는 유사한 질문에 대한 답변입니다:
- 2차원 배열의 주소 관련 질문.
해당 답변에서도 2차원 배열을 메모리에서 1차원 배열처럼 취급하여 각 원소에 접근하는 방식에 대해 설명하고 있습니다. 이는 강진성님이 질문하신 내용과 매우 유사하며, 여러분이 이해하신 개념을 잘 반영하고 있습니다. 이 예시는 ptr을 사용해 2차원 배열의 특정 원소에 직접 접근하는 방법을 보여주며, 포인터 산술 연산을 이용한 배열 원소 접근 방식과 일치합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Export template 안됨
1
36
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
59
3
main 함수에서 왜 int만 선언이 되는걸까요
1
58
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
56
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
50
1
프로토타입과 함수간의 인자 불일치
1
74
2
12.12 헤더 관련 질문
1
61
2
Visual Studio Community 2026 사용 문의
1
140
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
62
2
getchar(), putchar()
1
95
3
강의자리ㅛ
1
81
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
115
2
소스파일안에 여러 파일
1
77
2
F5와 F7의 차이
1
80
2
c = TWO * (a+b); 에서 a와 b는?
1
61
2
; 세미콜론을 붙이는 기준에 문의
1
71
1
Step over 기능 문의
1
55
2
2.6 강의 따옴표 출력 규칙 문의
1
78
2
int main 함수 관련 오류 문의
1
70
2
13.4 words[0]
0
62
2
11.7 함수를 구현해 봤습니다.
1
63
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
66
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
54
2
11.6 fit_str함수를 구현해 봤습니다.
1
55
2





