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를 담고있다.












+ Recent posts