(8-2)Pointer

C/C언어 이론 2018. 10. 3. 18:43
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
// [선언]
void SwapValue(int iNum1, int iNum2);
void SwapRef(int * pNum1, int * pNum2);
 
void main()
{
    /*
        함수에서 매개변수를 통해 값을 전달 받는 방법
            1. Call by Value
                - 값에 의한 호출
                - 우리가 여태 함수를 호출했던 형태
                - 실제 '값'을 전달 받는다.
            2. Call by Reference (address)
                - 참조에 의한 호출 (주소에 의한 호출)
                - 포인터변수를 매개변수로 사용하여 '주소 값'을 받는다.
                    > 함수 외부의 변수를 접근할 수 있다.
    */
 
    int iNum1 = 100;
    int iNum2 = 200;
 
    // 두 변수의 값을 바꿔주는 함수
    SwapValue(iNum1, iNum2);
    // SwapValue 호출 시 각 변수에 저장된 실제 '값' (100,200)을 전달!
    // iNum1,iNum2는 값만 전달해줬기 때문에 영향이 없다!
    printf("SwapValue 호출 후, iNum1(%d), iNum2(%d)\n", iNum1, iNum2);
 
    SwapRef(&iNum1, &iNum2);
    printf("SwapRef 호출 후, iNum1(%d), iNum2(%d)\n", iNum1, iNum2);
    // SwapRef 호출 시 각 변수의 주소 값을 전달! (함수의 매개변수가 포인터변수)
    // 함수 내부에서 main()의 iNum1,iNum2 공간을 직접 접근하여 값을 변경
}
 
// [정의] : 함수의 실제 수행문 (몸체)
void SwapValue(int iNum1, int iNum2)
{
    int iTemp = iNum1; // 임시공간에 iNum1의 값을 저장
    iNum1 = iNum2;
    iNum2 = iTemp; // 임시공간의 값(원래 iNum1의 값)을 iNum2에 저장
 
    printf("SwapValue 수행문, iNum1(%d), iNum2(%d)\n", iNum1, iNum2);
    // [참고]
    //  파이썬에서는   iNum1, iNum2 = iNum2, iNum1  이 코드가 된다...!
}
 
void SwapRef(int * pNum1, int * pNum2)
{
    int iTemp = *pNum1; // 전달받은 주소의 값
    *pNum1 = *pNum2;
    *pNum2 = iTemp;
}
cs


'C > C언어 이론' 카테고리의 다른 글

(8-4)Pointer  (0) 2018.10.03
(8-3)Pointer  (0) 2018.10.03
(8-1)Pointer  (0) 2018.10.03
(7-4)Array  (0) 2018.10.03
(7-3)Array  (0) 2018.10.03

설정

트랙백

댓글