[흑마 프로그래머] C 언어 학습 노트의 typedef(15)

개념
데이터 형식에 새 이름을 정의합니다
사용
1. 기본 데이터 유형
#include <stdio.h>

typedef int Integer;    //  int       Integer ,int     
typedef Integer Integer2;   //        ,  Integer       Integer2

int main()
{
    int i = 1;
    Integer i2 = 2;
    Integer2 i3 = 3;
    printf("%d, %d, %d
", i, i2, i3); // :1, 2, 3 return 0; }

2. 지침
#include <stdio.h>

typedef char * String;    //  char *       String

int main()
{
    String name = "hello";
    printf("%s
", name); // :hello return 0; }

3. 구조체
//    
struct PersonType {
    char *name;
};
typedef struct PersonType Person;

//    
typedef struct StudentType {
    char *name;
} Student;

//    
typedef struct{
    char *name;
} Cat;

int main()
{
    //    
    Person p = {"hello"};
    printf("%s
", p.name); // :hello // Student stu = {"world"}; printf("%s
", stu.name); // :world // Cat cat = {"world"}; printf("%s
", cat.name); // :world return 0; }

4. 구조체를 가리키는 지침
#include <stdio.h>

struct Person {
    char *name;
};

typedef struct Person * PersonPoint;

int main()
{
    struct Person p = {"hello"};
    PersonPoint pp = &p;
    pp->name = "world";
    printf("%s
", p.name); return 0; }

5. 열거
#include <stdio.h>

/*
//    
enum SexEnum {
    Man, Woman, Unknow
};

typedef enum SexEnum Sex;

//    
typedef enum SexEnum {
    Man, Woman, Unknow
} Sex;
 */
 
//    
typedef enum {
    Man, Woman, Unknow
} Sex;

int main()
{
    Sex sex = Man;
    printf("%d
", sex); return 0; }

6. 함수를 가리키는 바늘
#include <stdio.h>

int sum(int v1, int v2)
{
    return v1 + v2;
}

typedef int (*IntFunc)(int, int);

int main()
{
    IntFunc func = sum;
    printf("%d
", func(3, 4)); return 0; }

3. #define 및 typedef
다음 코드부터 볼게요.
4
#define String char *
typedef char * String2;

int main()
{
    String s1 = "hello";
    String2 s2 = "world";
    printf("%s, %s
", s1, s2); return 0; }
출력:
hello, 월드 이 코드는 모두가 쉽게 이해할 수 있습니다. 이제 다음 코드를 보십시오.
이때 어떤 차이가 있습니까?다음 내용을 살펴보겠습니다.
String s1, s2; String은 하나의 매크로 정의이기 때문에 사전 처리를 컴파일할 때 바로 교체되고char*s1,s2에 해당한다.좀 더 명확하게 말하면 바로char*s1이다.char s2; 이것은sizeof를 통해 증명할 수 있으며 s1만char*타입이고 s2는char타입입니다.
String2 s3, s4; typedef는 유형에 별명을 붙이기 때문에char*s3과 같습니다.char *s4; 그래서 s3, s4는 모두char*타입입니다.

좋은 웹페이지 즐겨찾기