728x90
C언어에서 배열을 사용할 때, 배열의 특정 위치에 접근하기 위해서는 다음과 같이 코드를 작성합니다.
arr[5];
[5]는 특정한 연산을 수행합니다. 그리고 그러한 특정한 연산 때문에 다음이 성립합니다.
arr[5] == 5[arr]
배열 첨자는 사실 다음과 같이 동작합니다.
a[b] $\to$ *( a + b )
(*a)[b] $\to$ *( (*a)+b)
(**a)[b] $\to$*((**a)+b)
이를 사용하면 다음과 같은 것들이 가능합니다.
int arr[5][5];
int arr[5][5];
printf("%d\n", & arr[2][3]);
printf("%d\n", & (*(arr + 2))[3] );
printf("%d\n", & (*( (*(arr + 2)) + 3)) );
int (*arr)[5][5];
int a[5][5]={};
int (*arr)[5][5];
arr = &a;
printf("%d\n", & (*arr)[2] [3] );
printf("%d\n", & ( * (*arr+2) ) [3] );
printf("%d\n", & * ((* (*arr+2) ) + 3) );
int (**arr)[5][5];
int ab[5][5]={0};
int (*ar)[5][5];
ar = &ab;
int (**arr)[5][5];
arr = &ar;
printf("%d\n", & (**arr)[2] [3] );
printf("%d\n", & ( * (**arr+2) ) [3] );
printf("%d\n", & * ((* (**arr+2) ) + 3) );
728x90
'c언어' 카테고리의 다른 글
[C언어] - 함수포인터 (0) | 2022.06.15 |
---|---|
[C언어] - Enum (열거형) (0) | 2022.06.15 |
[C언어] - union (0) | 2022.06.12 |
[C언어] - typedef (0) | 2022.06.12 |
[C언어] - 구조체 (Struct) (0) | 2022.06.12 |