C언어 타입선언
C언어를 공부하며 코딩한지는 오래됐지만 생각보다 C언어 타입 선언의 읽기와 이해는 맨날 볼때마다 헷갈릴때가 있습니다.
그래서 이번에 확실하게 정리하기 위해 포스팅을 해봅니다.
C언어의 타입선언 읽기 RULE
- 이름부터 무조건 읽어라. 그리고 이름 에서 가까운 순서로 읽으면 된다.
- 우선순위가 가장 높은것은 [] 배열연산자와, 함수연산자 ()는 먼저 읽어라.
ex:)
int * (* myVar) [100];
5 4 2 1 3
해석
=>myVar는 주소를 담는 포인터변수이며, 배열크기 [100]을 가르킬수있는애이며, 배열의 원소는 포인터 변수인데 int형인 자료를 가르키는 애로 쓰인다.
즉 그림으로 그려보면
자 한번에 너무 확 달린것같나요?
그럼 차근차근해보겠습니다.
char (*arr1)[4];
==> arr1은 포인터변수로서 주소를 가지는데, 이변수는 배열의 크기가 [4]인애를 가르키고 그 배열은 char형 자료들로 채워져있다!
-> arr1은 2차원배열의 형태를 가질 수 있습니다.
arr1[임의의 크기][4]
비교)
int *whoA[4]; // 포인터 배열.
whoA는 크기가 [4]인 배열인데, 포인터변수를(주소를) 가지고있으며, 그 주소는 int형을 가르킨다.
타입 선언 Reading skill
*
- 지금까지 읽은것의 타입은 주소(포인터변수)
- 앞으로 읽을것(다음에 나오는것은) 은, 그 주소(포인터변수)가 가리키는 대상의 자료형(타입)
[]
- 지금까지 읽은 것은 배열
- 앞으로 읽은 것은 배열의 원소하나의 자료형(타입)
()
-지금까지 읽은것은 함수이며 ()안에는 함수파라메터(이건 개발자가 구분해야됨)
- 앞으로 읽을것(다음에 나오는것은) 함수의 리턴타입.
char * (*test1) [10]
5 4 2 1 3
변수명은 test1이며, 자료형은 포인터이며, 그 포인터는 배열크기가 [10]인것을 가리키는데, 그배열은 원소는 포인터 변수인데, 그 포인터 변수는 char 자료형을 가리킨다.
int (* test2 [5] ) (int)
5 3 1 2 4
변수명은 test2이며, [5] 배열로써, 원소는 포인터변수인데 이포인터 변수가 가리키는 것은, 파라메터가 (int) 1개를가지며, 반환형이 int인 함수이다.
// 2의 경우 파라메터 변수를 생략할 수 있다. (*blabla)[10]...
char ( * myfunc ( char (*)[10]) ) [10];
5 3 1 2 4
이름이 myfunc이며, 파라메터로 2차원 배열을 가지며, 반환형은 포인터변수인데 이포인터 변수는, 배열의 크기가 [10]인것을 가르키며, 그배열은 char를 담고있다.