// test.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include "stdafx.h"
/*
void형 포인터.
널(NULL)포인터는 아무것도 가리키지 않는 포인터이다.
void형 포인터는 어느것이든 가리킬수 있는 포인터.
왜 어느것이든 가리킬수 있는 포인터냐면, 현재 가리키고
있는 대상체가 정해져 있지 않는 포인터이기 때문.
*/
int _tmain(int argc, _TCHAR* argv[])
{
/// void* 정의.
/// 포인터 변수이기 때문에 주소값만을 할당 할 수 있다.
void* voidp;
/* void형 포인터 변수의 성질.
1. 어떠한 형 변환(캐스트 연산자 사용) 없이도 void형 포인터 변수에 대입이 가능.
2. void형 포인터 변수에서 값을 읽을때는 반드시 캐스트 연산자를 사용.
3. *연산자(간접지정 연산자)를 사용할 때는 항숭 캐스트 연산자를 사용.
4. void형 포인터 변수에 ++, -- 를 사용할 때에는 항상 캐스트 연산자를 사용.
*/
int test_int = 1;
float test_float= 2;
double test_double= 3;
char test_char = 4;
/// 위의 성질 1.
voidp = &test_int;
//voidp = &test_float;
//voidp = &test_double;
//voidp = &test_char;
/// 성질 2.
std::cout << "test_int : " << *(int*)voidp << std::endl;
/// 성질 3 - 포인터 변수가 가르키는 곳에서 지정한 바이트 수 만큼 읽어 오라는 의미(*)가 없음.
/// error C2100: 간접 참조가 잘못되었습니다.
std::cout << "test_int: " << *voidp << std::endl;
/// 성질 4 - 성질 3과 같이 지정한 바이트 형을 알아야 그 형 만큼의 분기를 할수 있는데 모르기 때문
return 0;
}