-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2darraypointer.c
62 lines (50 loc) · 1.71 KB
/
2darraypointer.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* 2차원 행렬과 포인터
https://modoocode.com/25 */
#include <stdio.h>
int main()
{
int i = 0, j = 0;
//
// arr[cols][rows]
/*
int arr[2][3] = {1, 2,
3, 4,
5, 6};
*/
int arr[2][3] = {1, 2, 3,
4, 5, 6};
// 2차원 행렬을 가리키는 포인터는 column 갯수마다 증가해야 row가 하나 증가하므로 column 갯수를 표기해서 선언해야 한다
int(*parr)[3] = arr;
// 아니면 첫번째 원소 ([0][0])을 가리키는 포인터를 만든다
int *ptr = &arr[0][0];
// using void* (1 byte)
void *vptr = ptr;
// [row][col]이 아닌 [col][row]라는 방식으로 생각한다면 (즉 Cartesian plane 의 x, y 처럼)
for (j = 0; j < 3; j++)
{
for (i = 0; i < 2; i++)
{
printf("%d : ", i + j * 2);
printf("ptr: %d ", *(ptr + i + j * 2));
// arr[i][j] = baseAddress + [(i x no_of_cols + j) x size_of_data_type]
// convert void* to int* then reference by *
printf("vptr: %d // ", *(int *)(vptr + (i + j * 2) * sizeof(int)));
}
printf("\n");
}
// 위처럼 iteration을 하면 12/34/56으로 나오지만
printf("arr[1][1] = %d\n", arr[1][1]);
// 위처럼 row 2 column 2에 있는 원소를 직접 선택하면 5가 나온다. (4가 아니라)
printf("\n");
printf("arr : %p\n", arr);
printf("parr: %p\n", parr);
printf("arr[0] : %p\n", arr[0]);
printf("&arr[0][0] : %p\n", &arr[0][0]);
printf("arr[1] : %p\n", arr[1]);
printf("&arr[1][0] : %p\n", &arr[1][0]);
printf("전체 크기 : %lu\n", sizeof(arr));
printf("element 개수 : %lu\n", sizeof(arr) / sizeof(int));
printf("총 row 개수 : %lu\n", sizeof(arr) / sizeof(arr[0]));
printf("총 column 개수 : %lu\n", sizeof(arr[0]) / sizeof(arr[0][0]));
return 0;
}