배열과 포인터, 등가포인터 예제
#include <stdio.h>
int a[2][3] = {{1,2,3},{4,5,6}};
int b[2][3] = {{10,20,30},{40,50,60}};
int (*c[2])[3] = {b, a};
int (**p)[3] = c;
// c[1] => a
// 6: a[1][2] = c[1][1][2] = f1()[1][2]
// f1() = c[1]
// int (*[2])[3] => c
// int (*)[3] => c[1]
int (*f1(void))[3]
{
return c[1];
}
// int (*[2])[3] => c
// int (**)[3] => c 등가
// f2() = c+1
// f2()-1 = c
// 6 = a[1][2] = c[1][1][2] = (f2()-1)[1][1][2] = f2()[0][1][2]
int (**f2(void))[3]
{
return c+1;
}
// int a[2][3] => a
// int [3] => a[0]
// int *
// f3()+1 = a[0]
// 6 = a[1][2] = a[0][5] = (f3()+1)[5] = f3()[6]
int * f3(void)
{
return a[0]-1;
}
//int (**)[3] => p
// p = c => c[1] = a = p[1]
// p[1] = a, a[1][2] = p[1][1][2]
int (**f4(void))[3]
{
return p;
}
// int (*(*)[2])[3] => &c
// *f5() = c
// c[1] = a, a[1][2] = c[1][1][2] = (*f5())[1][1][2] = f5()[0][1][1][2]
int (*(*f5(void))[2])[3]
{
return &c;
}
int main(void)
{
printf("6=%d\n", f1()[1][2]);
printf("6=%d\n", f2()[0][1][2]);
printf("6=%d\n", f3()[6]);
printf("6=%d\n", f4()[1][1][2]);
printf("6=%d\n", f5()[0][1][1][2]);
return 0;
}
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | C Programming FAQs(한글번역 pdf문서) | makersweb | 2014.03.18 | 27011 |
10 | 비트 필드의 크기는 해당 유형의 크기를 초과할 수 없다. | makersweb | 2023.04.25 | 464 |
9 | flexible array member 에 대해서 | makersweb | 2020.02.20 | 2042 |
» | 배열과 포인터, 등가포인터 예제 | makersweb | 2019.01.16 | 1209 |
7 | 함수포인터와 typedef로의 선언 | makersweb | 2018.02.03 | 1256 |
6 | 예제소스를 통해 리틀엔디안(Little endian)과 빅엔디안(Big endian)의 차이점 알아보기 | pjk | 2014.05.24 | 8245 |
5 | switch와 if 중 어느 것이 더 빠른가 | makersweb | 2017.01.31 | 2935 |
4 | volatile이 정확히 어떤 의미를 가지는 건가요? | pjk | 2014.09.30 | 4718 |
3 | unsigned형의 모든 상수에는 접미사 ‘U’를 사용하여야 한다. | pjk | 2014.05.24 | 37605 |
2 | void형 포인터 | pjk | 2014.05.24 | 5230 |
1 | C언어 강좌-배열과 포인터 | makersweb | 2014.03.10 | 4727 |