void 형 포인터는 함수와 포인터 변수에만 적용 되는 타입니다.
일반 변수에는 사용 할 수 없다.
int i = 1;
double d = 1.0;
char c = 'a';
void *vp ;
vp = &i ;
vp = &d ;
vp = &c ;
void 형 포인터는 어떠한 대상체 든 캐스팅 없이 가릴킬수 있다
int* pi ;
double* pd ;
char* pc ;
pi = (int *)vp;
pd = (double *)vp;
pc = (char *)vp;
반대로 임의의 포인터에 void형 포인터를 대입할때는 반드시 캐스팅을 하여야 한다.
void* 형 포인터는 *연산자를 쓸 수 없다.
void* 형 포인터는 임의의 대상체에 대한 번지값만을 저장하며 이위치에 어떤 값이 들어있는지 알지 못한다 그래서 *연산자로 이 포인터가 가리키는 메모리에 값을 읽을 수 없다.
대상체의 타입이 정해져 있지 않으므로 몃바이트를 읽어야 할지 또는 어떤 식으로 해석 해야 할지 알수가 없다 또한 증감 연산자도 불가능하다
활용 예제 :
void arDump (void* array, int length)
{
int i ;
for (i =0; i< length; i ++)
{
// printf 서식검색하여확인하자
// %02X = 부호없는16 진수정수2 번째 자리 까지만 보인다
printf("%02X" ,*(unsigned char*)array +i);
// *(unsigned char*) = 부호없는정수포인터형변환 char(1바이트)
// array+i = 메모리주소에서1바이트씩메모리를옴기면서읽어들인다
}
printf("\n" );
}
void main ()
{
int ari [] = {1,2,3,4,5};
char arc [] = "Pointer";
printf("ari size = %d \n" ,sizeof( ari));//20
printf("arc size = %d \n" ,sizeof( arc));// 8
arDump(ari , sizeof( ari));// ari= void* 형변환되어함수로넘어가고 sizeof(ari)=20(바이트) 전채크기를넘어간다
arDump(arc , sizeof( arc));// arc= void* 형변환되어함수로넘어가고 sizeof(arc)=8(바이트) 전채크기를넘어간다
}
'Programming > C++' 카테고리의 다른 글
06. 포인터 와 함수 , 더블포인터 (0) | 2017.12.20 |
---|---|
05. _msize() 함수 동적할당후 크기 알아오기 (0) | 2017.12.20 |
04. C언어의 메모리 구조 (0) | 2017.12.20 |
0. 소소한 팁 sizeof() (0) | 2017.12.20 |
02. C 언어 기초 포인터 끼리의 산술 연산 (0) | 2017.12.20 |
01. C 언어 포인터 기초 (0) | 2017.12.20 |
가변인자 이용 Log.h (0) | 2017.12.19 |
가변인자 기본 소스 (0) | 2017.12.19 |