1. typedef 키워드를 이용해서 자료형에 새이름을 부여
간단한 예제를 봐보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> typedef int INT; typedef INT * PINT; void SwapRef(PINT p1, PINT p2) { INT tmp=*p1; *p1=*p2; *p2=tmp; } int main(void) { INT val1=5; INT val2=7; printf("Swap 이전 [val1:%d, val2:%d] \n", val1, val2); SwapRef(&val1, &val2); printf("Swap 이후 [val1:%d, val2:%d] \n", val1, val2); return 0; } | cs |
3행에서 typedef 선언으로 인해서 8,15,16행과 같은 형태로 int형 변수의 선언이 가능하다.
4행에서 INT * 에 PINT라는 이름을 붙여준다.
이처럼 3행에서 미리 만들어진 이름을 이용하여 typedef 선언을 하는 것도 얼마든지 가능하다.
이 선언으로 인해 6행과 같은 형태의 매개변수 선언이 가능하다.
2. 배열 형에 typedef 선언하는 방법
double DBARR [5];
이는 길이가 5인 double형 배열의 선언이다.
typedef double DBARR [5];
그런데 이 선언 앞에 typedef를 붙이면 의미가 완전히 달라진다.
여기서는 DBARR 이 자료형의 새로운 이름이다!
그리고 이것은 길이가 5인 double형 배열의 선언이다.
따라서 다음과 같은 형태의 배열 선언이 가능하다.
DBARR arr; //double DBARR [5]; 와 완전 동일
즉 배열 선언 앞에 typedef 를 붙여주면 배열의 이름이 typedef 에 의해 선언된 자료형의 이름으로 인식된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <stdio.h> typedef int IARR3[3]; typedef int I2ARR4[][4]; void Incre2Arr(I2ARR4 arr, int height); void Print2Arr(I2ARR4 arr, int height); int main(void) { IARR3 arr1={1, 2, 3}; I2ARR4 arr2={ {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; int i; for(i=0; i<3; i++) printf("%4d", arr1[i]); printf("\n\n"); Print2Arr(arr2, 3); printf("\n"); Incre2Arr(arr2, 3); Print2Arr(arr2, 3); return 0; } void Incre2Arr(I2ARR4 arr, int height) { int i, j; for(i=0; i<height; i++) for(j=0; j<4; j++) arr[i][j]++; } void Print2Arr(I2ARR4 arr, int height) { int i, j; for(i=0; i<height; i++) { for(j=0; j<4; j++) { printf("%4d", arr[i][j]); } printf("\n"); } } | cs |
1 2 3 4 5 6 7 8 9 10 | 1 2 3 1 2 3 4 5 6 7 8 9 10 11 12 2 3 4 5 6 7 8 9 10 11 12 13 | cs |
2행 : 길이가 3인 int형 배열의 형(type)에 IARR3라는 이름을 부여하고 있다. 이 선언으로 인하여 10
행과 같은 방식으로 길이가 3인 int형 1차원 배열을 선언할 수 있다.
3행 : 가로 길이가 4인 int형 2차원 배열의 형에 I2ARR4라는 이름을 부여하고 있다. 이 선언으로 인
하여, 11행과 같은 방식으로 가로 길이가 4인 int형 2차원 배열을 선언할 수 있다.
31, 39행 : 3행의 선언으로 만들어진 새로운 이름의 자료형 I2ARR4를 매개변수 선언에도 활용할 수
있음을 보이고 있다.
3. 다차원 배열 포인터의 typedef 선언
int (*I2ARR3) [3];
이는 가로 길이가 3인 int형 2차원 배열을 가리킬 수 있는 포인터 변수의 선언이다.
이 앞에 typedef 를 붙이면
typedef int (*I2ARR3) [3];
I2ARR3은 포인터형의 이름이 된다.
4. typedef 선언의 이점
typedef 이용시 유지보수에 이점이 있다.
아래 두 코드를 비교해보자
만약 왼쪽 코드의 메인 함수의 반환값 을 제외한 모든 int를 double로 바꾼다고 해보자
그러면 총 4번의 변경이 필요하다.
하지만 오른쪽 코드 같은 경우 typedef 에 선언된 int만 한번 바꿔주면 모든곳에 적용되는 이점이 있다!
'BackEnd > C' 카테고리의 다른 글
포인터의 const 선언 (0) | 2019.03.14 |
---|---|
메모리 공간의 동적 할당 (1) | 2019.03.14 |
Call-By-Value vs Call-By-Reference (0) | 2019.03.14 |
다차원 배열 이름의 포인터형 (0) | 2019.03.14 |
배열의 이름은 상수 형태의 포인터이다. (0) | 2019.03.13 |