ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • class_lab11.cpp 참조에 의한 호출
    C++/class 2022. 6. 8. 14:29

    값에 의한 호출

    1. int형, double형, ... 

    2. 지역변수이기 때문에 변수의 값을 교환할 수 없다.

     

    참조에 의한 호출(포인터 이용)

    같은 메모리값을 공유하기 때문에 변수의 값을 교환할 수 있다.

     

    Key Point

    1. 값을 교환하는 방법

    int tmp;

     

    tmp = *px;

    *px = *py;

    *py = tmp;

     

    2. 값에 의한 호출과 참조에 의한 호출 차이점

    - swap(int 형 변수 a,b)

    - swap(&a, &b)

     

     


    //
    //  main.cpp
    //  pointer II
    //
    //  Created by yeonsu on 2022/06/08.
    //
    
    #include <iostream>
    using namespace std;
    
    
    // ====================== < 값에 의한 호출 > =======================
    void swap(int x, int y);
    
    // ====================== < 참조에 의한 호출 > ======================
    void swap(int *px, int *py);    //포인터 이용
    
    
    
    int main(){
    
    // ====================== < 값에 의한 호출 > =======================
        cout << "\n<값에 의한 호출>\n\n";
        int a = 100, b = 200;
        cout << "swap() 호출 전 : x = " << a << ", y = " << b << endl;
        swap(a, b);
        cout << "swap() 호출 후 : x = " << a << ", y = " << b << endl;
        
        
        
    // ====================== < 참조에 의한 호출 > ======================
        cout << "\n\n<참조에 의한 호출>\n\n";
        a = 100, b = 200;
        cout << "swap() 호출 전 : *px = " << a << ", *py = " << b << endl;
        swap(&a,&b);
        cout << "swap() 호출 후 : *px = " << a << ", *py = " << b << endl << endl;
        return 0;
        
    }
    
    
    
    
    
    // ====================== < 값에 의한 호출 > =======================
    void swap(int x, int y){
        
        int tmp;
        
        cout << "In swap(): x = " << x << ", y = " << y << endl;
        
        tmp = x;
        x = y;
        y = tmp;
        
        cout << "In swap(): x = " << x << ", y = " << y << endl;
    }
    
    // ====================== < 참조에 의한 호출 > ======================
    
    void swap(int *px, int *py){
        int tmp;
        
        cout << "In swap(): *px = " << *px << ", *py = " << *py << endl;
        
        tmp = *px;
        *px = *py;
        *py = tmp;
        
        cout << "In swap(): *px = " << *px << ", *py = " << *py << endl;
    }

     

    실행결과

     


    함수가 2개 이상의 결과를 반환해야 하는 경우(slope.cpp)

    [기본 개념] 함수는 1개의 반환값만을 가질 수 있다.

    참조에 의한 호출을 이용해서 기울기와 y절편을 반환값으로 가질 수 있는 코드를 작성해보자.

     

    //
    //  slope.cpp
    //  pointer II
    //
    //  Created by yeonsu on 2022/06/08.
    //
    
    #include <iostream>
    using namespace std;
    
    int get_line_parameter(int x1, int y1, int x2, int y2, float *slope, float *yintercept){
        
        if (x1 == x2){
            return -1;  //위치 동일 -> 수직선이 되기 때문에 기울기값을 구할 수 없음
        }
        else{
            *slope = (float)(y2-y1) / (float)(x2-x1);
            *yintercept = y1 - (*slope) * x1;
        }
        return 0;
    }
    
    int main(){
        
        float s, y;
        
        if(get_line_parameter(3,3,6,6, &s, &y) == -1)
            cout << "에러" << endl;
        
        else
            cout << "기울기는 " << s << endl << "y절편은 " << y << endl;
        
        return 0;
    }

    실행결과

     

Designed by Tistory.