강께르의 개발일지
[C++] void 포인터와 함수형 포인터 본문
1. void 포인터란?
- void 포인터는 const, volatile를 사용하여 선언되지 않은 객체를 포함한 모든 자료형 변수를 가리킬 수 있는 있다.
- 가리키고 있는 변수의 자료형의 크기, 길이를 알아올 수 없을 뿐이다. 시작 주소를 제공 받아 쓸 수 있는 것이다.
- 함수를 가리키는 주소값을 저장하여 함수형 포인터로 사용할 수 있다.
- 다른 이름으로 제네릭 포인터(generic pointer)라고 불린다.
2. 사용 시 유의사항
- void 포인터는 자신이 가리키는 변수가 어떤 자료형인지 알지 못하기 때문에 직접 역참조를 할 수 없다.
- 그러므로 void 포인터의 역참조를 수행하기 위해서 가리키고 있는 변수의 자료형으로 형 변환을 해야만 한다.
- void 포인터의 포인터 연산도 역참조와 마찬가지 방법으로 형 변환을 한 뒤에 연산을 하면 된다.
int a = 1, int b = 2;
void* aptr = &a;
void* bptr= &b;
cout << *(int*)aptr; // O, 역참조 가능
cout << *bptr; // X, 역참조 불가능
(int*)aptr + 1; // 형 변환을 먼저 수행하고 포인터 연산을 수행
(int*)bptr - 1;
- void reference는 되지 않는다고 한다.
3. 함수형 포인터
- 함수의 이름은 함수를 가리키는 주소값이다. 실제 함수를 호출하면 함수의 주소를 이용하여 호출하는 것이다.
- 이 함수의 주소를 저장하여 함수를 가리키는 함수 포인터를 void 포인터로 가능하다.
- 함수의 주소를 가리키는 함수 포인터는 함수를 간접적으로 실행이 가능하다.
void func(void) { } // 이런 함수가 있다고 한다면...
void (*funcPtr)(void); // void 포인터로 함수 포인터를 만들고
funcPtr = func; // 주소값을 대입하여
funcPtr(); // 사용하면 된다.
출처 : https://dojang.io/mod/page/view.php?id=511
C 언어 코딩 도장: 59.3 void 포인터로 포인터 연산하기
void 포인터는 자료형의 크기가 정해져 있지 않기 때문에 +, -로 연산을 해도 얼마만큼 이동할지 알 수가 없습니다. 따라서 void 포인터는 포인터 연산을 할 수 없습니다. void_pointer_add_error.c #include #
dojang.io
c++ void 포인터(generic 포인터), 함수형 포인터
1. void 포인터 c, c++ 언어에서 generic 포인터라고도 알려진 void 포인터는 굉장히 특별한 타입이다. 그 어떤 타입이든 객체든 가리킬 수 있는 포인터이기 때문이다. 심지어 함수도 가리킬 수 있기 때
psyhm.tistory.com
https://younggwan.tistory.com/56
C++ void* 보이드 포인터
정의 MSDN에서 void에 정의는 다음과 같다 함수 반환 형식으로 사용 하는 경우 void 키워드는 함수가 값을 반환 하지 않도록 지정 합니다. 함수 매개 변수 목록에 사용 되는 경우 void 는 함수가
younggwan.tistory.com
https://boycoding.tistory.com/211
C++ 07.19 - void pointer
void pointer 제네릭 포인터(generic pointer)라고도 불리는 void pointer는 모든 데이터 자료형을 가리킬 수 있는 특별한 타입의 포인터다. void 포인터는 void 키워드를 사용하여 일반 포인터처럼 선언한다.
boycoding.tistory.com
'프로그래밍 > C++' 카테고리의 다른 글
[C++] 객체 지향 프로그래밍과 특징 정리 (0) | 2021.06.10 |
---|---|
[C++] enum과 enum class (0) | 2021.06.10 |
[C++] Call by value / address / reference (0) | 2021.06.09 |
[C++] 함수 / 함수 오버로딩 / 디폴트 매개변수 (0) | 2021.06.07 |
[C++] 메모리 영역에 대한 조사 및 정리 (0) | 2021.06.02 |