본문 바로가기

C언어/C언어 문법

[C언어] 사용자 정의 자료형(typedef), 구조체 typedef 선언

728x90
반응형

typedef

 

typdef 선언을 통해 기존에 존재하던 자료형에 새로운 이름을 부여할 수 있게 된다.

 

예를 들어 아래 코드와 같이 선언하게 되면 int 에 또 다른 이름으로 INT를 부여해 줄 수 있다.

 

typedef int INT;
 

 

 

 

 

 

따라서 아래 두 가지 선언은 둘 다 정수형 변수를 선언하는 코드라고 할 수 있다.

 

#include <stdio.h>

typedef int INT;

int main()
{
    int num1 = 10;
    INT num2 = 20;
    
    printf("%d %d", num1, num2);

    return 0;
}
 

 

위 코드를 실행해 보면 num1 과 num2 에 저장된 값이 정상적으로 출력되는 것을 확인할 수 있다.

 

 

 

 

 

 

 

typedef 선언을 할 때 이름이 여러 개이면 가장 마지막에 나오는 단어가 새로운 이름이 된다.

 

예를 들어 아래 코드와 같이 선언을 하면  'name1 name2' 라는 자료형에 'name3' 이라는 새로운 이름을 부여한 것이다.

 

typedef name1 name2 name3;
 

 

 

 

 

 

따라서 아래 코드와 같이 선언을 하면 'unsigned char' 과 'unsigned char *' 이라는 자료형에

'UCHAR' 과 'UPCHAR' 이라는 이름을 부여한 것이다.

typedef unsigned char UCHAR;
typedef unsigned char* UPCHAR;
 

 

 

 

 

 

 

 

 

구조체 typedef 선언

 

이를 응용해서 구조체에도 typedef 선언을 할 수 있다.

 

위에서 설명한 내용과 마찬가지로 아래 코드와 같이 선언을 하면

 

typedef struct ID NewID;

 

 

'struct ID' 라는 자료형에 'NewID' 라는 새로운 이름을 부여해 준 것이다.

 

 

 

따라서 구조체를 사용할 때 아래 코드와 같이 사용할 수 있다.

 

#include <stdio.h>

struct ID {
    char name[20];
    char address[20];
};
typedef struct ID NewID;

int main()
{
    NewID man1 = {"enchupin", "Seoul"};
    printf("Name : %s\nAddress : %s", man1.name, man1.address);
    return 0;
}
 

 

위 코드를 실행시켜보면 정상적으로 저장된 데이터가 출력되는 것을 확인할 수 있다.

 

 

 

 

구조체의 typedef 선언을 할 때 typedef 선언과 구조체 선언을 합치거나 구조체의 원래 이름을 생략할 수 있다.

 

따라서 아래 코드와 같은 선언도 가능하다.

 

typedef struct score {
    int math;
    int korea;
} NewScore;

typedef struct {
    int stdid;
    int age;
} NewStudent;

 

 

구조체에 접근할 때에는 새로 만든 이름인 NewScore과 NewStudent 이름을 통해서 접근하면 된다.

 

위 코드를 응용하여 아래 코드처럼 사용할 수 있다.

 

 

#include <stdio.h>

typedef struct score {
    int math;
    int korea;
} NewScore;

typedef struct {
    int stdid;
    int age;
} NewStudent;

int main ()
{
    NewScore man1 = {100, 50};
    NewStudent man2 = {1234, 23};

    printf("Math Score : %d\n", man1.math);
    printf("Korea Score : %d\n", man1.korea);
    printf("Student ID : %d\n", man2.stdid);
    printf("Age : %d", man2.age);

    return 0;
}
 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형