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] 과 같다.