Programming/C
2차원 배열과 배열 포인터 정리
한우콩
2020. 2. 17. 14:57
1.
#include <stdio.h>
int main() {
int arr[2][3] = { {1, 2, 3}, {4, 5, 6}}
printf("%d\n", sizeof(arr)); // 24
printf("%d\n", sizeof(arr[0])); // 12
printf("%d\n", sizeof(arr[0][0])); // 4
}
sizeof(arr) - 배열 전체의 크기
sizeof(arr[0]) - 첫번째 행의 크기
sizeof(arr[0][0]) - 1행 1열의 크기
2.
/*
1. ptr == &ptr[0]
2. *ptr == ptr[0]
3. ptr + 1 == ptr에 sizeof(*ptr)을 더한값
*/
#include <stdio.h>
int main() {
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
// 1. ptr[i] == arr[i]
// 2. ptr[i][j] == arr[i][j]
// 3. ptr == arr
int(*ptr)[3] = arr; // 3의 길이를 가지는 일차원 배열을 가지고 있다.
// ptr은 행 전체를 가리키는 포인터이고, ptr에 1을 더할 때마다 그 다음 행을 가리킨다고 이해해도 된다.
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", ptr[i][j]);
}
printf("\n");
}
}
ptr = arr 이라는 건 ptr = &arr[0] 과 같다.