C언어 타입 선언 읽기 연습
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를 담고있다.