목차
4) typedef는 포인터에 대해 "별칭"을 사용합니다. " > 4) typedef는 포인터에 대해 "별칭"을 사용합니다.
일반적인 문제 typedef의 사용법은 무엇입니까

typedef의 사용법은 무엇입니까

Jun 07, 2023 am 10:38 AM
c 언어 typedef 사용법

Typedef 사용법에는 다음이 포함됩니다. 1. Typedef 기본 데이터 유형은 "별칭"을 사용하며 C 언어의 모든 데이터 유형은 typedef를 사용하여 유형 이름을 재정의할 수 있습니다. 2. Typedef는 사용자 정의 데이터 유형에 대해 "별칭"을 사용하며 사용자 정의 데이터 유형에는 다음이 포함됩니다. 구조 구조체 이름{ };, 공용체 단위 이름 { };, 열거형 열거형 { }; 3. Typedef는 배열에 대해 "별칭"을 사용합니다. 4. Typedef는 포인터에 대해 "별칭"을 사용합니다.

typedef의 사용법은 무엇입니까

이 기사의 운영 환경: Windows 10 시스템, C++ 20 버전, dell g3 컴퓨터.

실제 응용 프로그램에서 typedef는 주로 다음 네 가지 용도로 사용됩니다.

1) Typedef 기본 데이터 유형은 "별칭"을 사용합니다.

즉, C 언어의 모든 데이터 유형은 다음과 같습니다. typedef 키워드를 사용하여 유형 이름을 재정의하세요

typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
로그인 후 복사
로그인 후 복사
2) typedef는 사용자 정의 데이터 유형에 "별칭"을 사용합니다.

사용자 정의 데이터 유형에는 다음이 포함됩니다: 구조체 구조체 이름{ } , 공용체 단위 이름 { } ;, 열거형 열거형 { }

struct students{
	char sex;
	char name[120];
	int ages;};
로그인 후 복사
로그인 후 복사

구조의 데이터 이름을 재정의하는 데 일반적으로 사용되는 방법은 다음과 같습니다.

struct students{
	char sex;
	char name[120];
	int ages;}std;std.name[20]="wujunwu"
로그인 후 복사
로그인 후 복사

또한 typedef를 사용하여 정의할 수도 있습니다.

struct students{
	char sex;
	char name[120];
	int ages;};typedef struct students std;std.name[20]="wujunwu"
로그인 후 복사
로그인 후 복사
3) Typedef는 배열에 대해 "별칭"을 사용합니다.
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
로그인 후 복사
로그인 후 복사
4) typedef는 포인터에 대해 "별칭"을 사용합니다.
일반 포인터
int a=2;int* pointer;pointer =&a;
로그인 후 복사
로그인 후 복사

는 다음과 같습니다.

int a=2;typedef int* pointer;pointer p;p=&a;
로그인 후 복사
로그인 후 복사

a의 데이터 유형이 char인 경우, 즉 char a =2이면

char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
로그인 후 복사
로그인 후 복사
입니다. 함수 포인터
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
로그인 후 복사
로그인 후 복사

사실 위 프로그램은 두 단계를 수행합니다.
첫 번째 단계: 포인터에 "별칭" 지정

pCopySDMMC2Mem p1;pBL2Type p2;
로그인 후 복사
로그인 후 복사

두 번째 단계: 강제 유형 변환

(pCopySDMMC2Mem)0xD0037F98;  //真正在写代码时不能这样写(pBL2Type)0x23E00000;
로그인 후 복사
로그인 후 복사

세 번째 단계: 포인터에 값 할당 포인터

p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
로그인 후 복사
로그인 후 복사

요약: typedef를 사용할 때 typedef는 새로운 유형을 생성하지 않고 프로그램에서 사용할 기존 유형에 대한 "별칭"을 제공할 뿐입니다.

typedef의 트랩

다음 코드와 같이 간단한 typedef 사용 예를 살펴보겠습니다.

typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
로그인 후 복사
로그인 후 복사

위 코드에서 "const PCHAR"는 "const char*"와 동일합니까?

답은 '아니오'입니다. Typedef는 유형의 새로운 별칭을 정의하는 데 사용되며 단순한 문자열 대체가 아닙니다. 따라서 "const PCHAR"의 const는 전체 포인터 자체에 불변성을 부여하여 상수 포인터 "char* const(char를 가리키는 상수 포인터)"를 형성합니다. 즉, 실제로는 "const char*(상수 char에 대한 포인터)"가 아니라 "char* const"와 동일합니다. 물론, 다음 코드에서 볼 수 있듯이 const PCHAR을 const char*와 동일하게 만드는 것도 쉽습니다.

typedef const char* PCHAR;int strcmp(PCHAR, PCHAR);
로그인 후 복사
로그인 후 복사

실제로 포인터에 대한 typedef를 선언할 때마다 최종 typedef 이름에 const를 추가해야 합니다. 그래서 포인터 자체는 일정합니다.

typedef가 객체의 저장 특성에 실제로 영향을 미치지는 않지만 auto, extern, static 및 Register와 같은 키워드와 마찬가지로 여전히 구문상의 저장 클래스 키워드라는 점에 유의하는 것도 중요합니다. 따라서 다음과 같은 선언 방법은 적합하지 않습니다.

typedef static int INT_STATIC;
로그인 후 복사
로그인 후 복사

불가능한 이유는 여러 개의 저장소 클래스 키워드를 선언할 수 없기 때문입니다. typedef가 이미 저장소 클래스 키워드의 위치를 ​​차지하고 있으므로 선언할 필요가 없습니다. typedef 선언에서는 더 이상 static 또는 기타 스토리지 클래스 키워드를 사용할 수 없습니다. 물론 컴파일러는 오류도 보고합니다. 예를 들어 VC++2010의 오류 메시지는 "여러 저장소 클래스를 지정할 수 없습니다."입니다.

typedef와 #define의 차이점:

(1) typedef에 의해 생성된 기호 이름은 유형으로만 제한되며 값은 해당되지 않습니다.
(2) typedef는 컴파일러에 의해 해석되며 해석되지 않습니다. 전처리기

typedef의 네 가지 용도

실제 응용 프로그램에서 typedef는 주로 다음 네 가지 용도로 사용됩니다.

1) typedef의 기본 데이터 유형은 "별칭"입니다.

즉, 모든 데이터 유형은 C 언어를 사용할 수 있습니다. typedef 키워드를 사용하여 유형 이름을 재정의하세요

typedef unsigned int size;typedef unsigned int16 u16;typedef unsigned int8 u8;...
로그인 후 복사
로그인 후 복사
2) typedef는 사용자 정의 데이터 유형에 대한 "별칭"을 사용합니다.

사용자 정의 데이터 유형에는 다음이 포함됩니다: 구조 구조체 이름{ }, 공용체 단위 이름 { }; 열거형 enum { };

struct students{
	char sex;
	char name[120];
	int ages;};
로그인 후 복사
로그인 후 복사

구조의 데이터 이름을 재정의하는 데 일반적으로 사용되는 방법은 다음과 같습니다.

struct students{
	char sex;
	char name[120];
	int ages;}std;std.name[20]="wujunwu"
로그인 후 복사
로그인 후 복사

또한 typedef를 사용하여 다음을 정의할 수도 있습니다.

struct students{
	char sex;
	char name[120];
	int ages;};typedef struct students std;std.name[20]="wujunwu"
로그인 후 복사
로그인 후 복사
3) Typedef는 "별칭"을 사용합니다. 배열
typedef char arr_name[20];arr_name ane; ane[20]="wujunwu"
로그인 후 복사
로그인 후 복사
4) typedef는 포인터에 대한 "별칭"을 사용합니다.
일반 포인터
int a=2;int* pointer;pointer =&a;
로그인 후 복사
로그인 후 복사

는 다음과 동일합니다.

int a=2;typedef int* pointer;pointer p;p=&a;
로그인 후 복사
로그인 후 복사

a의 데이터 유형이 char인 경우, 즉 char a =2 ; 그런 다음

char a=2;typedef int* pointer;pointer p;p=&(pointer)a;
로그인 후 복사
로그인 후 복사
함수 포인터
typedef unsigned int bool;typedef bool(*pCopySDMMC2Mem)(int, unsigned int, unsigned short, unsigned int*, bool);typedef void (*pBL2Type)(void);pCopySDMMC2Mem p1=(pCopySDMMC2Mem)0xD0037F98;pBL2Type p2 = (pBL2Type)0x23E00000;
로그인 후 복사
로그인 후 복사

사실 위 프로그램은 두 단계를 수행합니다.
1단계: 포인터에 "별칭" 지정

pCopySDMMC2Mem p1;pBL2Type p2;
로그인 후 복사
로그인 후 복사

2단계: 유형 변환 강제

(pCopySDMMC2Mem)0xD0037F98;  //真正在写代码时不能这样写(pBL2Type)0x23E00000;
로그인 후 복사
로그인 후 복사

3단계: 할당 포인터에 대한 값

p1=(pCopySDMMC2Mem)0xD0037F98;p2 = (pBL2Type)0x23E00000;
로그인 후 복사
로그인 후 복사

요약: typedef를 사용할 때 typedef는 새로운 유형을 생성하지 않고 프로그램에서 사용할 기존 유형에 대한 "별칭"을 제공할 뿐입니다.

typedef의 트랩

다음 코드와 같이 간단한 typedef 사용 예를 살펴보겠습니다.

typedef char* PCHAR;int strcmp(const PCHAR,const PCHAR);
로그인 후 복사
로그인 후 복사

위 코드에서 "const PCHAR"는 "const char*"와 동일합니까?

답은 '아니오'입니다. Typedef는 유형의 새로운 별칭을 정의하는 데 사용되며 단순한 문자열 대체가 아닙니다. 따라서 "const PCHAR"의 const는 전체 포인터 자체에 불변성을 부여하여 상수 포인터 "char* const(char를 가리키는 상수 포인터)"를 형성합니다. 즉, 실제로는 "const char*(상수 char에 대한 포인터)"가 아니라 "char* const"와 동일합니다. 물론, 다음 코드에서 볼 수 있듯이 const PCHAR을 const char*와 동일하게 만드는 것도 쉽습니다.

typedef const char* PCHAR;int strcmp(PCHAR, PCHAR);
로그인 후 복사
로그인 후 복사

실제로 포인터에 대한 typedef를 선언할 때마다 최종 typedef 이름에 const를 추가해야 합니다. 그래서 포인터 자체는 일정합니다.

typedef가 객체의 저장 특성에 실제로 영향을 미치지는 않지만 auto, extern, static 및 Register와 같은 키워드와 마찬가지로 여전히 구문상의 저장 클래스 키워드라는 점에 유의하는 것도 중요합니다. 따라서 다음과 같은 선언 방법은 적합하지 않습니다.

typedef static int INT_STATIC;
로그인 후 복사
로그인 후 복사

불가능한 이유는 여러 개의 저장소 클래스 키워드를 선언할 수 없기 때문입니다. typedef가 이미 저장소 클래스 키워드의 위치를 ​​차지하고 있으므로 선언할 필요가 없습니다. typedef 선언에서는 더 이상 static 또는 기타 스토리지 클래스 키워드를 사용할 수 없습니다. 물론 컴파일러는 오류도 보고합니다. 예를 들어 VC++2010의 오류 메시지는 "여러 저장소 클래스를 지정할 수 없습니다."입니다.

위 내용은 typedef의 사용법은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어에서 typedef 구조체 사용법 C 언어에서 typedef 구조체 사용법 May 09, 2024 am 10:15 AM

C 언어에서 typedef 구조체 사용법

C 언어에서 strcpy와 strcat의 차이점 C 언어에서 strcpy와 strcat의 차이점 May 08, 2024 pm 01:03 PM

C 언어에서 strcpy와 strcat의 차이점

C 언어에서 Real은 무엇을 의미합니까? C 언어에서 Real은 무엇을 의미합니까? May 09, 2024 pm 12:06 PM

C 언어에서 Real은 무엇을 의미합니까?

C 언어로 거듭제곱 함수를 구현하는 방법 C 언어로 거듭제곱 함수를 구현하는 방법 May 09, 2024 pm 11:33 PM

C 언어로 거듭제곱 함수를 구현하는 방법

C 언어에서 scanf 오류가 발생하면 어떻게 해야 할까요? C 언어에서 scanf 오류가 발생하면 어떻게 해야 할까요? May 09, 2024 am 11:39 AM

C 언어에서 scanf 오류가 발생하면 어떻게 해야 할까요?

C 언어에서 제한을 사용하는 방법 C 언어에서 제한을 사용하는 방법 May 08, 2024 pm 01:30 PM

C 언어에서 제한을 사용하는 방법

_C 언어의 복잡한 사용법 _C 언어의 복잡한 사용법 May 08, 2024 pm 01:27 PM

_C 언어의 복잡한 사용법

_C언어에서 bool은 무슨 뜻인가요? _C언어에서 bool은 무슨 뜻인가요? May 08, 2024 pm 01:33 PM

_C언어에서 bool은 무슨 뜻인가요?