도서 : 초보자를 위한 C++ 프로그래밍(성안당)
지음 : 강성수 지음
- void * 형 포인터는 다음과 같은 경우에 사용한다.
- void * 형 포인터는 가리키는 자료형을 결정한 것이 아니므로 모든 자료형의 포인터를 저장할 수 있도록 일반화한 것이다. 즉 자료형을 예측할 수 없는 경우에 사용한다.
- 따라서 자료형 정보가 없으므로 연산이나 참조하려면 명시적 형 변환을 이용하여 강제로 자료형을 지정하여 만들어야 한다.
- 반드시 캐스트 변환을 사용하여 대입할 변수의 자료형 포인터로 변환해야 오류 없이 사용할 수 있다.
- 실습 : 1차원 배열을 포인터로 표현하기
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
29
30
31
32
33
34
35
36
37 |
#include <iostream>
using namespace std;
void iswap(void* px, void* py);
void dswap(void* px, void* py);
int main()
{
int x = 3, y = 7;
double dx = 2.4, dy = 77.88;
cout << "swap 호출 전, x: " << x << " y: " << y << endl;
iswap(&x, &y);
cout << "swap 호출 후, x: " << x << " y: " << y << endl;
cout << "swap 호출 전, dx: " << dx << " dy: " << dy << endl;
dswap(&dx, &dy);
cout << "swap 호출 후, x: " << dx << " y: " << dy << endl;
return 0;
}
void iswap(void* px, void* py) {
int temp;
temp = *(int*)px; //캐스트 변환(타입 *)하여 대입 변환한다.
*(int*)px = *(int*)py; //포인터 변수를 사용해 x변수의 내용을 전달한다.
*(int*)py = temp; //포인터 변수를 사용해 y변수의 내용을 전달한다.
}
void dswap(void* px, void* py) {
double temp;
temp = *(double*)px; //캐스트 변환(타입 *)하여 대입 변환한다.
*(double*)px = *(double*)py; //포인터 변수를 사용해 x변수의 내용을 전달한다.
*(double*)py = temp; //포인터 변수를 사용해 y변수의 내용을 전달한다.
} |
cs |
- 결과
'C++ 개념' 카테고리의 다른 글
공용체 (0) | 2019.03.01 |
---|---|
포인터와 다차원 배열, 함수 (0) | 2019.02.28 |
문자열 함수 (0) | 2019.02.28 |
continue문 - 흐름 이동 (0) | 2019.02.27 |
수학 함수 (0) | 2019.02.27 |