도서 : 초보자를 위한 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

+ Recent posts