C/C

포인터 pointer 3 - void 포인터

HicKee 2022. 10. 3. 20:04

1. void 포인터

자료형이 정해지지 않은 포인터 >> void * 포인터 이름

 

int main() {
	int num1 = 10;
	char c1 = 'a';
	int* numPtr1 = &num1;
	char* cPtr1 = &c1;

	void* ptr; // void 포인터 선언

	//포인터 자료형이 달라도 컴파일 경고가 없음
	ptr = numPtr1;
	printf("numPtr1 : %p\n", numPtr1);
	printf("ptr1 : %p\n", ptr);

	ptr = cPtr1;
	printf("cPtr : %p\n", cPtr1);
	printf("ptr : %p\n", ptr);

	numPtr1 = ptr;
	cPtr1 = ptr;


	ptr = numPtr1;
	printf("%d", *ptr); //컴파일 에러 void 포인터는 역참조 할 수 없음

	ptr = cPtr1;
	printf("%c", *ptr); //컴파일 에러 void 포인터는 역참조 할 수 없음
	//C2100	간접 참조가 잘못되었습니다.

	void v1; //void 는 변수를 선언할수 없다
	//컴파일 에러 C2182 'v1': 'void' 형식을 잘못 사용했습니다.

}

 

void 포인터는 자료형이 정해지지 않은 특성을 가짐
                   이 특성으로 인해 어떤 자료형 포인터라도 다 저장할 수 있다.
                   반대로 어떤 자료형 포인터에도 void 포인터를 저장할 수 있다.
             >> void포인터를 범용 포인터라고 한다. 

                             (직접 자료형을 변환하지 않아도 암시적으로 자료형이 변환함)

 

주의 :

void 포인터는 자료형이 정해지지 않았다

                       그러므로 값을 가져오거나 저장할 크기도 정해지지 않음
          >> void 포인터는 역참조를 할 수 없다.

 

void 포인터의 사용

>> 함수에서 다양한 자료형을 받을 때 
>> 함수의 반환 포인터를 다양한 자료형으로 된 포인터에 저장할때
>> 자료형을 숨기고 싶을때 사용

'C > C' 카테고리의 다른 글

포인터 pointer 4 - 이중 포인터, 주의할 점  (0) 2022.10.04
strlen(); 문자열의 길이  (0) 2022.10.03
포인터 pointer 2 - 자료형 포인터 와 const  (0) 2022.10.02
포인터 pointer 1 - & 과 역 참조  (0) 2022.10.01
static  (0) 2022.09.29