C 언어 에서 typedef 의 용법 과\#define 의 차이 에 대한 상세 한 설명

1.간결 한 정의
C 언어 는'별명'을 붙 이 는 것 처럼 데이터 형식 에 새로운 별명 을 붙 일 수 있다.프로 그래 밍 에서 별명 을 짓 는 것 은 프로그래머 의 프로 그래 밍 편 의 를 위해 서 입 니 다.예 를 들 어:
다음 구조 체 정의

struct stu
{
	int ID;
	char name[20];
	float score[3];
	char *data;
};
구조 체 변 수 를 정의 하려 면 이렇게 써 야 합 니 다.

struct stu Marry;//Marry          
이 곳 은 오늘 의 주제 문법 인 type:def 를 사용 하여 정의 에 필요 한 문 자 를 줄 이 고 목적 을 달성 할 수 있 습 니 다.다음 과 같 습 니 다.

typedef struct stu
{
	int ID;
	char name[20];
	float score[3];
	char *data;
}STU;
//    Marry     
STU Marry;
아주 간단 한 정의 문 자 를 볼 수 있 습 니 다.구조 체 정 의 를 완성 할 수 있 습 니 다.또한 type:def 는 기 존 형식 에 도 사용 할 수 있 습 니 다.기 존 형식 에 새로운 이름 을 지 을 수 있 습 니 다.
2.기 존 유형 에 대한 별명
typedef 의 용법 은 일반적으로:
typedef oldName newName;
예 를 들 어 다음 과 같 습 니 다.int 에 Integer 라 는 이름 을 지 었 습 니 다.

typedef int MY_int;
MY_int a, b;
a = 1;
b = 2;
/*    MY_int a, b ;    int a, b; */
여기 MYint a, b ; int a,b 와 같다.
type:def 는 배열,포인터,구조 체 등 유형 에 별명 을 정의 할 수 있 습 니 다.먼저 배열 형식 에 별명 을 정의 하 는 예 를 보 겠 습 니 다.
문자 배열 의 별명 을 지정 합 니 다.
typedef char ARRAY20[20];
ARRAY 20 은 유형 char[20]의 별명 임 을 나타 낸다.그것 은 길이 가 20 인 배열 형식 이다.이 어 ARRAY 20 으로 배열 을 정의 할 수 있 습 니 다.
ARRAY20 a1, a2, s1, s2;
결 과 는 다음 과 같 습 니 다.ARRAY 20 이 정의 하 는 배열 의 길 이 는 20 글자 입 니 다.

따라서 ARRAY 20 a1,a2,s1,s2;char a1[20],a2[20],s1[20],s2[20]와 같다.즉,배열 도 유형 이 있 습 니 다.예 를 들 어 char a1[20];배열 a1 을 정 의 했 습 니 다.그 유형 은 char[20]입 니 다.
포인터
포인터 형식 에 별명 을 정의 합 니 다.예 를 들 어 다음 과 같 습 니 다.
typedef int (*ptr_to_arr)[4];
표시 ptrto_arr 는 유형 int*[4]의 별명 으로 2 차원 배열 포인터 형식 입 니 다.이어서 ptr 를 사용 할 수 있 습 니 다.to_arr 정의 2 차원 배열 포인터:
ptr_to_arr p1, p2;
이것 은 p1,p2 가 모두 2 차원 배열 포인터 이 고 함수 포인터 형식 에 별명 을 정의 할 수 있 습 니 다.

typedef int (*ptr_to_func)(int, int);
ptr_to_func pfunc;
아래 는 포인터 형식 과 함수 형식 에 대한 별명 을 표시 합 니 다.

#include <stdio.h>

typedef char (*ptr_to_arr )[30];
typedef int (*ptr_to_func )(int, int);

int max(int a, int b){
    return a>b ? a : b;
}

char str[3][30] = {
    "Happy New Year",
    "Good Good Study",
    "Day Day up"
};

int main(){
    ptr_to_arr parr = str;//parr           ,  str          
    ptr_to_func  pfunc = max;//pfunc        ,  max  
    int i;
   
    printf("max: %d
", (*pfunc)(10, 20)); for(i=0; i<3; i++){ printf("str[%d]: %s
", i, *(parr+i)); } return 0; }
결 과 는 다음 과 같다.

강조해 야 할 것 은 type:def 는 새로운 형식 을 만 드 는 것 이 아니 라 기 존 형식 에 새로운 이름 을 부여 하 는 것 입 니 다.'이름 을 보고 뜻 을 안다'는 뜻 이 명확 한 식별 자 를 사용 하고 대문자 로 쓰 십시오.
3.typedef 와\#define 의 차이
typedef 는 표현 에 있어 서\#define 과 유사 하지만 매크로 교체 와 관건 적 인 차이 가 있 습 니 다.이 문 제 를 정확하게 생각 하 는 방법 은 type:def 를 철저한'패키지'유형 으로 보고 성명 한 후에 다른 것 을 추가 해 서 는 안 된다 는 것 이다.예 를 들 어 다음 과 같은 상황:
1)매크로 형식 이름 을 다른 형식 으로 확장 할 수 있 습 니까?
unsigned 로\#define 정의 변 수 를 맞 추 면 사용 할 수 있 습 니 다:

#define MY_int int
unsigned MY_int n;  //   
그러나 unsigned 와 type:def 가 정의 하 는 변 수 를 결합 하면 사용 할 수 없습니다.

typedef int MY_int ;
unsigned MY_int n;  //  ,    MY_int      unsigned
type:def 의 완전 성 을 나 타 냈 습 니 다.
2)몇 개의 변 수 를 연속 으로 정의 할 때 type:def 는 정 의 된 모든 변 수 를 같은 유형 으로 보장 할 수 있 으 며,\#define 은 보장 할 수 없습니다.예 를 들 면:

#define My_int int *
My_int p1, p2;
//매크로 로 바 꾸 면:
int *p1, p2;
이렇게 하면 p1,p2 는 서로 다른 유형 이 되 고 p1 은 int 형식 을 가리 키 는 지침 이 며 p2 는 int 형식 데이터 입 니 다.
type:def 가 정의 하 는 별명 에 대해 서 는 다음 과 같은 상황 이 존재 하지 않 습 니 다.

typedef int * PTR_INT
PTR_INT p1, p2;
p1,p2 유형 이 같 습 니 다.모두 int 형식 을 가리 키 는 지침 입 니 다.
총결산
C 언어 에서 typedef 의 용법 과\#define 의 차이 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C 언어 typedef 및\#define 의 차이 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기