그 외/정보처리기사
이중 포인터와 주소 값, 이중 배열 예제
CBJH
2024. 7. 26. 22:46
728x90
반응형
1. 이중 포인터 (Double Pointer)
이중 포인터는 포인터를 가리키는 포인터입니다. 기본적인 개념부터 시작해서 단계별로 설명해보겠습니다.
예시 코드
#include <stdio.h>
int main() {
int x = 10;
int *p = &x; // 'p'는 'x'의 주소를 가리킵니다.
int **pp = &p; // 'pp'는 'p'의 주소를 가리킵니다.
printf("x의 값: %d\n", x); // 출력: 10
printf("p가 가리키는 값: %d\n", *p); // 출력: 10
printf("pp가 가리키는 값: %d\n", **pp); // 출력: 10
printf("x의 주소: %p\n", (void*)&x); // x의 주소 출력
printf("p의 주소: %p\n", (void*)&p); // p의 주소 출력
printf("pp의 주소: %p\n", (void*)&pp); // pp의 주소 출력
printf("p가 가리키는 주소: %p\n", (void*)p); // p가 가리키는 주소 출력 (x의 주소)
printf("pp가 가리키는 주소: %p\n", (void*)pp); // pp가 가리키는 주소 출력 (p의 주소)
return 0;
}
설명
- x는 정수형 변수입니다.
- p는 x를 가리키는 포인터입니다. 즉, p는 x의 주소를 저장합니다.
- pp는 p를 가리키는 이중 포인터입니다. 즉, pp는 p의 주소를 저장합니다.
- 이중 포인터를 사용하면 포인터의 포인터에 접근할 수 있습니다.
2. 주소값 (Address Value)
포인터는 다른 변수의 주소를 저장하는 변수입니다. 주소값을 통해 변수에 직접 접근할 수 있습니다.
예시 코드
#include <stdio.h>
int main() {
int y = 20;
int *py = &y;
printf("y의 값: %d\n", y); // 출력: 20
printf("y의 주소: %p\n", (void*)&y); // y의 주소 출력
printf("py의 값: %p\n", (void*)py); // py의 값 출력 (y의 주소)
printf("py가 가리키는 값: %d\n", *py); // 출력: 20
return 0;
}
설명
- y는 정수형 변수입니다.
- py는 y의 주소를 가리키는 포인터입니다.
- py를 통해 y의 값을 간접적으로 접근할 수 있습니다.
3. 이중 배열 (2D Array)
이중 배열은 배열의 배열입니다. 행과 열로 이루어진 2차원 배열입니다.
예시 코드
#include <stdio.h>
int main() {
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("arr[%d][%d]의 값: %d\n", i, j, arr[i][j]);
}
}
return 0;
}
설명
- arr은 2x3 크기의 2차원 배열입니다.
- 배열의 각 요소에 접근할 때는 arr[i][j]와 같은 방식으로 접근합니다.
- arr[0][0]은 첫 번째 행의 첫 번째 열을 가리키며, arr[1][2]는 두 번째 행의 세 번째 열을 가리킵니다.
종합 예제
이제 이중 포인터와 이중 배열을 결합한 예제를 보겠습니다.
#include <stdio.h>
int main() {
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
int (*p)[3] = matrix; // 'p'는 3개의 정수를 가지는 배열을 가리키는 포인터
printf("matrix[0][0]: %d\n", matrix[0][0]); // 출력: 1
printf("matrix[0][1]: %d\n", matrix[0][1]); // 출력: 2
printf("matrix[0][2]: %d\n", matrix[0][2]); // 출력: 3
printf("matrix[1][0]: %d\n", matrix[1][0]); // 출력: 4
printf("matrix[1][1]: %d\n", matrix[1][1]); // 출력: 5
printf("matrix[1][2]: %d\n", matrix[1][2]); // 출력: 6
printf("p[0][0]: %d\n", p[0][0]); // 출력: 1
printf("p[1][2]: %d\n", p[1][2]); // 출력: 6
return 0;
}
설명
- matrix는 2x3 이중 배열입니다.
- p는 3개의 정수를 가지는 배열을 가리키는 포인터입니다.
- p를 통해 matrix의 요소에 접근할 수 있습니다.