학습 내용
1. void 포인터란?
2. 역참조
3.
1. Void 포인터란?
void *ptr;
- 포인터 변수 자체의 크기는 4byte
2. 역참조(포인터가 가리키는 값을 불러오기)
역참조가 주의해야 할 사항이다.
#include <stdio.h>
int main() {
int a = 10;
void *b = &a;
printf("%d\n", *b);
}
이렇게 하면 에러뜬다. void포인터가 뭘 가리키는지 알려주지 않으면 컴파일러가 오류를 출력한다.
아래처럼 해야한다.
#include <stdio.h>
int main() {
int a = 10;
void *b = &a;
printf("%d\n", *(int*)b);
}
추가 예시
#include <stdio.h>
int main()
{
int num1 = 10;
float num2 = 3.5f;
char c1 = 'a';
void *ptr;
ptr = &num1; // num1의 메모리 주소를 void 포인터 ptr에 저장
// printf("%d\n", *ptr); // 컴파일 에러
printf("%d\n", *(int *)ptr); // 10: void 포인터를 int 포인터로 변환한 뒤 역참조
ptr = &num2; // num2의 메모리 주소를 void 포인터 ptr에 저장
// printf("%f\n", *ptr); // 컴파일 에러
printf("%f\n", *(float *)ptr); // 3.500000: void 포인터를 float 포인터로 변환한 뒤 역참조
ptr = &c1; // c1의 메모리 주소를 void 포인터 ptr에 저장
// printf("%c\n", *ptr); // 컴파일 에러
printf("%c\n", *(char *)ptr); // a: void 포인터를 char 포인터로 변환한 뒤 역참조
return 0;
}
참조
dojang.io/mod/page/view.php?id=495
'Programming > C++' 카테고리의 다른 글
Template, Template 특수화 (0) | 2021.07.08 |
---|---|
2차원 배열 동적할당 / 3차원 배열 동적할당 (0) | 2021.03.26 |
Class 객체 선언 방식 2가지 (0) | 2021.01.01 |
C++ 캡슐화, 디폴트 생성자, new, 복사생성자 (0) | 2020.12.27 |
구조체 (0) | 2020.12.27 |
댓글