C 및 C++에서 void*란 무엇입니까?

C Mich C Eseo Void Lan Mueos Ibnikka



C 및 C++는 메모리 관리 및 데이터 조작을 위해 포인터에 크게 의존하는 두 가지 프로그래밍 언어입니다. 포인터는 프로그램이 메모리에 저장된 데이터에 액세스하고 조작할 수 있도록 하는 메모리 주소를 저장하는 변수입니다. 특별한 유형의 포인터는 다음과 같습니다. 무효 포인터(void*) , 라고도 함 일반 포인터 .

보이드 포인터(void*)란 무엇입니까?

일반 포인터라고도 하는 무효 포인터는 특정 데이터 유형과 연결되지 않은 포인터이므로 모든 유형의 데이터를 가리키는 데 적합합니다. 즉, 무효 포인터 정수, 문자, 문자열 또는 기타 데이터 유형을 가리킬 수 있습니다. 이러한 유연성 덕분에 void 포인터는 C 및 C++ 프로그래밍에서 강력한 도구가 됩니다.

C 및 C++에서 Void 포인터 선언

C와 C++에서는 무효 포인터 다음 구문을 통해 선언됩니다.







무효의 * ptr ;

C 및 C++에서 Void 포인터 사용

무효 포인터 C에서 변수의 데이터 유형을 알 수 없거나 런타임에 달라질 수 있는 경우에 주로 사용됩니다. 특정 데이터 유형을 알 필요 없이 데이터를 저장하고 조작하는 일반적인 방법을 허용합니다. 특히 다양한 유형의 데이터를 처리할 수 있는 함수 또는 데이터 구조를 처리할 때 유용합니다.



하나의 일반적인 용도 무효 포인터 다음과 같은 메모리 할당 함수에 있습니다. 맬록() 모든 데이터 유형을 저장하는 데 사용할 수 있는 메모리 블록에 대한 빈 포인터 포인터를 반환합니다. 그런 다음 프로그래머는 할당된 메모리 블록에 저장된 데이터에 액세스하고 조작하기 위해 적절한 데이터 유형에 대한 무효 포인터를 캐스팅할 수 있습니다.



C에서 void 포인터의 또 다른 용도는 다음과 같습니다. 함수 포인터 , 함수의 메모리 주소를 저장하는 변수입니다. Void 포인터는 반환 유형이나 매개변수 목록에 관계없이 모든 함수의 메모리 주소를 저장하는 데 사용할 수 있으므로 함수 포인터 사용에 더 많은 유연성을 허용합니다.





의 사용 무효 포인터 C++에서 거의 비슷하지만 서로 다른 클래스의 개체에 대한 일반 인터페이스를 만드는 데 사용할 수도 있습니다. 이는 서로 다른 클래스의 개체를 균일하게 처리할 수 있는 가상 함수를 사용하여 달성되는 경우가 많습니다. 또한 C++는 C보다 더 엄격한 유형 검사를 제공합니다. 무효 포인터 잘못하면 더 많은 오류와 버그가 발생할 수 있습니다.

C 및 C++에서 Void 포인터를 사용할 때 고려해야 할 사항

다음은 사용 시 고려해야 할 몇 가지 사항입니다. 무효 포인터 C와 C++에서.



1: C에서는 무효의* 반환 값 및 함수 매개 변수로 사용할 수 있지만 C++에서는 특정 데이터 유형의 포인터가 있어야 합니다.

예를 들어:

C에서 코드는 다음과 같습니다.

#include

#include

무효의 * 추가_번호 ( 정수 , 정수 ) {

정수 * 결과 = 말록 ( 크기 ( 정수 ) ) ;

* 결과 = + ;

반품 ( 무효의 * ) 결과 ;

}

무효의 인쇄 결과 ( 무효의 * 결과 ) {

정수 * ptr = ( 정수 * ) 결과 ;

printf ( '결과: %d \N ' , * ptr ) ;

무료 ( ptr ) ;

}

정수 기본 ( ) {

정수 숫자 1 = 5 , 숫자 2 = 7 ;

무효의 * 결과 = 추가_번호 ( 숫자 1 , 숫자 2 ) ;

인쇄 결과 ( 결과 ) ;

반품 0 ;

}

위의 코드는 함수를 정의합니다. add_numbers() 반환하는 무효의* 인수로 전달된 두 정수를 더한 결과에 대한 포인터. 함수 print_result() 소요 무효* 포인터 그리고 그 결과를 출력합니다. main() 함수에서 다음을 호출합니다. add_numbers() 결과를 전달 무효* 포인터 에게 print_result() 인쇄용.

C++에서는 특정 데이터 유형이 필요합니다.

#include

네임스페이스 표준 사용 ;

무효의 printInt ( 정수 * 하나에 ) {

쿠우트 << '정수는: ' << * 하나에 << ;

}

정수 기본 ( ) {

정수 엑스 = 10 ;

정수 * ptr = & 엑스 ;

printInt ( ptr ) ;

반품 0 ;

}

2: C에서는 다음을 통해 void 포인터를 다른 포인터 유형으로 변환할 수 있습니다. 암시적 변환 그러나 C++에서는 다음을 사용해야 합니다. 명시적 변환 변환하기 위해 무효 포인터 다른 포인터 유형에.

다음은 C와 C++ 모두에 대한 간단한 코드 예제로 절대적인 그리고 명시적 변환 ~의 무효 포인터 다른 포인터 유형:

C에서는 다음 코드가 사용됩니다.

#include

무효의 printChar ( 무효의 * 채널 ) {

= * ( * ) 채널 ;

printf ( '%씨 \N ' , ) ;

}

정수 기본 ( ) {

= 'ㅏ' ;

무효의 * ptr = & ;

printChar ( ptr ) ;

반품 0 ;

}

위의 코드는 함수를 정의합니다. printChar void 포인터를 매개 변수로 사용하고 해당 메모리 위치에 저장된 문자를 인쇄합니다. 메인 함수에서 char 변수 정의되고 그 주소는 무효 포인터에 저장됩니다. ptr. 그만큼 printChar 그런 다음 함수는 무효 포인터 'ptr' 인수로. void 포인터는 명시적으로 char 포인터로 변환됩니다. 'printChar' 저장된 값에 액세스하고 인쇄하는 기능 '씨' .

C++에서 코드는 다음과 같습니다.

#include

무효의 printInt ( 무효의 * 하나에 ) {

정수 * ptr = static_cast < 정수 *> ( 하나에 ) ;

성병 :: 쿠우트 << * ptr << 성병 :: ;

}

정수 기본 ( ) {

정수 엑스 = 10 ;

무효의 * ptr = & 엑스 ;

printInt ( ptr ) ;

반품 0 ;

}

위의 코드는 함수를 정의합니다. printInt 이는 무효 포인터 num을 매개변수로 사용하고 다음을 사용하여 정수 포인터로 캐스트합니다. static_cast 연산자 . 그런 다음 함수는 캐스팅된 포인터가 가리키는 정수 값을 인쇄합니다. main 함수에서 정수 변수 x가 정의되고 그 주소는 a에 저장됩니다. 무효 포인터 ptr, 다음으로 전달됩니다. printInt 기능. 프로그램의 출력은 x의 값인 10입니다.

마지막 생각들

그만큼 무효의 C 및 C++의 포인터는 특정 데이터 유형을 알 필요 없이 데이터를 조작하는 강력한 방법을 제공합니다. C++에서 다양한 클래스의 개체에 대한 일반 인터페이스를 생성할 뿐만 아니라 메모리 할당 및 함수 포인터에 유용합니다. 그러나 C와 C++의 차이점을 고려하는 것이 중요합니다. 무효 포인터 예를 들어 C++에서 특정 데이터 유형이 필요하고 void 포인터를 다른 포인터 유형으로 캐스팅할 때 명시적 변환이 필요합니다. 이러한 사항을 주의 깊게 고려하면 보다 효율적이고 효과적으로 사용할 수 있습니다. 무효 포인터 프로그래밍에서.