Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- i2c 통신
- atmega 128a
- uart 통신
- behavioral modeling
- LED
- Recursion
- prescaling
- BASYS3
- D Flip Flop
- java
- verilog
- stop watch
- gpio
- hc-sr04
- structural modeling
- Pspice
- DHT11
- half adder
- Linked List
- vivado
- Algorithm
- Edge Detector
- test bench
- soc 설계
- FND
- pwm
- dataflow modeling
- ATMEGA128A
- ring counter
- KEYPAD
Archives
- Today
- Total
거북이처럼 천천히
C++ Generic pointer 본문
1. Generic pointer
- 특정 자료형(Specific type)에 얽매이지 않고, 모든 자료형 변수의 주소를 담는 포인터
- 가리키는 대상의 자료형(Type)이 정해지지 않은 포인터
1-1. 제네릭 포인터의 사용 주의 사항
- 제네릭 포인터는 모든 자료형 변수의 주소를 담을 수 있는 포인터이지만, 사용시 엄격한 규칙을 갖는다.
- 이유는 생각해보면 단순하다. 제네릭 포인터를 통해 역참조할 경우, 현재 제네릭 포인터가 가르키는 변수의 자료형이 int형 변수의 주소인지, char형 변수의 주소인지 어떻게 아는가? 당연히 모른다.
- 따라서 제네릭 포인터를 역참조하여 데이터를 꺼내기 위해서는 형변환이 필수 이다.
- 또한, 포인터 연산 또한 불가능하다. 만약, 제네릭 포인터가 가르키는 주소가 배열이 아닌 일반 변수라면 ptr+1할 경우, 타 메모리 주소로 접근하여 해당 주소에 있는 데이터를 훼손할 가능성이 있기 때문이다.
1-2. 제네릭 포인터 사용 예시 (C언어)
int a = 10;
void* p_gen = &a;
int b = *(int*)p_gen;
- int형 변수 a의 주소를 제네릭 포인터인 p_gen에 저장했다.
- 제네릭 포인터를 통해 변수 a의 값인 10에 접근하기 위해서 *p_gen을 통해 역참조한 것이 아니라, 한 번 (int*) 형으로 형변환을 한 뒤, 그 이후에 역참조하게 된다.
- 이를 통해 컴파일러는 "내가 제네릭 포인터를 통해 역참조하려고 하는데, 해당 주소에서 4byte 데이터를 읽어야 겠구나."라고 알고, 4byte 만큼의 데이터를 읽어 오게 된다.
1-3. 제네릭 포인터 사용 예시 (C++언어)
int a = 10;
void* p_gen = &a;
// C++ 스타일의 권장 방식
int b = *static_cast<int*>(p_gen);'C++' 카테고리의 다른 글
| C++ 스트림 (Stream) (0) | 2026.01.27 |
|---|---|
| C++ Programming Basic Structure (1) (0) | 2026.01.25 |
| C++ namespace (0) | 2026.01.25 |