void 및 void 지침 의 의 미 를 깊이 이해 하 다.
void 포인터 사용 규범 ① void 포인터 가 임의의 유형의 데 이 터 를 가리 킬 수 있 고 임의의 데이터 형식의 포인터 로 void 포인터 에 값 을 부여 할 수 있 습 니 다.예 를 들 어 int*pint;void *pvoid;pvoid = pint; /* 하지만 pint=pvoid;*/pvoid 를 다른 종류의 지침 에 부여 하려 면 다음 과 같은 강제 형식 변환 이 필요 합 니 다:pint=(int*)pvoid;
② ANSI C 표준 에 서 는 pvoid+또는 pvoid+1 등 void 포인터 에 대한 산술 연산 을 허용 하지 않 으 며,GNU 에 서 는 void*가 char*와 같다 고 생각 하기 때문에 허용 합 니 다.sizeof( *pvoid )== sizeof( char ).
void 의 역할 ① 함수 반환 에 대한 한정.② 함수 매개 변수 에 대한 한정.함수 가 값 을 되 돌려 줄 필요 가 없 을 때 void 한정 을 사용 해 야 합 니 다.예 를 들 어 void func(int,int);함수 가 인 자 를 받 아들 일 수 없 을 때 void 한정 을 사용 해 야 합 니 다.예 를 들 어 int func(void).
void 지침 은 임의의 형식의 데 이 터 를 가리 킬 수 있 고 임의의 데이터 형식의 지침 으로 void 지침 에 값 을 부여 할 수 있 기 때문에 void 지침 으로 함수 형 삼 을 수 있 습 니 다.그러면 함 수 는 임의의 데이터 형식의 지침 을 매개 변수 로 받 아들 일 수 있 습 니 다.예 를 들 어 void*memcpy(void*dest,const void*src,sizet len );void * memset( void * buffer, int c, size_t num );
많은 초보 자 들 이 C/C++언어의 void 와 void 포인터 유형 에 대해 잘 이해 하지 못 하기 때문에 사용 에 있어 서 약간의 오류 가 발생 했다.본 고 는 void 키워드 의 깊 은 의 미 를 설명 하고 다음은 void 와 void 포인터 유형의 사용 방법 과 기 교 를 상세 하 게 서술 할 것 이다.
1.규칙 은 void 포인터 유형 을 ANSI(American National Standards Institute)기준 에 따라 void 포인터 에 대해 알고리즘 조작 을 할 수 없습니다.즉,다음 작업 은 모두 합 법 적 이지 않 습 니 다.void*pvoid;pvoid++;//ANSI:오류 pvoid+=1;/ANSI:오류//ANSI 기준 이 이렇게 인정 하 는 이 유 는 알고리즘 작업 을 하 는 지침 은 가리 키 는 데이터 형식 크기 를 확인 해 야 하기 때 문 입 니 다./예 를 들 어 int*pint;pint++;//ANSI:정확 한 pint+의 결 과 는 sizeof(int)를 증가 시 키 는 것 입 니 다.그러나 유명한 GNU(GNU's NotUnix 의 줄 임 말)는 그렇게 인정 하지 않 고 void*를 지정 하 는 알고리즘 은 char*와 일치 합 니 다.따라서 다음 문 구 는 GNU 컴 파일 러 에서 모두 정확 합 니 다.pvoid+;/GNU:정확 한 pvoid+=1;/GNU:올 바른 pvoid++의 실행 결 과 는 1 이 커 졌 습 니 다.실제 프로 그래 밍 에서 ANSI 표준 에 맞 게 프로그램의 이식 성 을 높이 기 위해 같은 기능 을 실현 하 는 코드 를 작성 할 수 있 습 니 다:void*pvoid;(char*)pvoid++;//ANSI:정확 합 니 다.GNU:정확 함(char*)pvoid+=1;/ANSI:오류;GNU:정확 한 GNU 와 ANSI 는 약간의 차이 가 있 습 니 다.전체적으로 보면 GNU 는 ANSI 보다 더 개방 적 이 고 더 많은 문법 에 대한 지원 을 제공 합 니 다.그러나 우 리 는 실제 디자인 을 할 때 가능 한 한 ANSI 기준 에 맞 춰 야 한다.
2.규칙 2 함수 의 매개 변수 가 임의의 유형 포인터 일 수 있다 면 그 매개 변 수 는 void*전형 적 인 메모리 조작 함수 memcpy 와 memset 의 함수 원형 은 각각 void*memcpy(void*dest,constvoid*src,sizetlen); void*memset(void*buffer,intc,size_tnum);이렇게 하면 모든 종류의 지침 이 memcpy 와 memset 에 들 어 갈 수 있 습 니 다.이것 은 메모리 조작 함수 의 의 미 를 진실 하 게 나 타 냅 니 다.왜냐하면 이 작업 대상 은 메모리 일 뿐 이 고 이 메모리 가 어떤 유형 이 든 간 에.memcpy 와 memset 의 매개 변수 유형 이 void*가 아니 라 char*라면 정말 이상 합 니 다!이러한 memcpy 와 memset 는 분명히'순수 하고 저급한 취미 에서 벗 어 나 는'함수 가 아 닙 니 다!다음 코드 실행 이 정확 합 니 다://예제:memset 은 임의의 종류의 지침 int 를 받 습 니 다. intarray[100]; memset(intarray,0,100*sizeof(int));//intarray 0//예제:memcpy 는 임의의 종류의 지침 int 를 받 습 니 다. intarray1[100], intarray2[100];memcpy(intarray1,intarray2,100*sizeof(int));//intarray 2 를 intarray 1 에 복사 하 는 재 미 있 는 것 은 memcpy 와 memset 함수 가 void*유형 으로 돌아 가 는 것 입 니 다.표준 라 이브 러 리 함수 의 작성 자 는 얼마나 학문 이 풍부 합 니까?
3.규칙 3 void 는 진실 한 변 수 를 대표 할 수 없습니다.아래 코드 는 모두 void 가 진실 한 변 수 를 대표 하도록 하려 고 하기 때문에 모두 잘못된 코드 입 니 다:voida;/오류 함수(voida);/잘못된 void 는 추상 을 나 타 냈 다.이 세상의 변 수 는 모두'유형 이 있다'는 것 이다.예 를 들 어 한 사람 이 남자 가 아니면 여자(그리고 요괴?)이다.void 의 등장 은 추상 적 인 수 요 를 위해 서 일 뿐 입 니 다.만약 에 대상 을 대상 으로 하 는'추상 적 인 기본 클래스'의 개념 을 정확하게 이해 하면 void 데이터 유형 도 쉽게 이해 할 수 있 습 니 다.추상 적 인 기본 클래스 에 인 스 턴 스 를 정의 할 수 없 듯 이 우 리 는 void(우리 가 유사 하 게 void 를'추상 적 인 데이터 형식'이 라 고 부 르 도록 하 는)변 수 를 정의 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 단일 void 유형 측정 방법 상세 정보우리가 자바를 배울 때 선생님이나 일반적인 책에는 자바의 기본 유형은 8가지라고 쓰여 있다.각각:byte,int,short,long,float,double,char,boolean.그러나 오늘 아침 나는 자바의 성경인...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.