C 언어 에서 typedef 의 용법 과\#define 의 차이 에 대한 상세 한 설명
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 의 차이 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.