C/C++ 콜바이 레퍼런스

조회수 573회
#include <iostream>
using namespace std;

int getInput(int *a, int *b, int *c){
    cin >> *a;
    cin>> *b;
    cin>> *c;
    return 0;
}

int maxmin(int n1, int n2, int n3,int *max2, int *min2){
    *max2 = (n1 > n2) ? (n1 > n3 ? n1 : n3) : (n2 > n3 ? n2 : n3);
    *min2 = (n1 < n2) ? (n1 < n3 ? n1 : n3) : (n2 < n3 ? n2 : n3);
    return 0;
}

int main() {
    int num1, num2, num3;
    int max, min;
        getInput(&num1, &num2, &num3);
        maxmin(num1, num2, num3, &max, &min);
        cout<<"The gap between "<<max<<" and "<<min<<" : "<<max-min<<endl;
        return 0;
}

maxmin함수안에 소스코드를 if형식으로 바꿀수있나요? 또한 이소스코드에서 &. * 가 무엇인지 모르겠네여. max(num1,num2,num3)값들은 getInput 함수에서 입력받은 숫자들인건가요?

2 답변

  • 1 ) maxmin함수안에 소스코드를 if형식으로 바꿀수있나요?

    *max2 = (n1 > n2) ? (n1 > n3 ? n1 : n3) : (n2 > n3 ? n2 : n3);
    
    if(n1>n2){
        if(n1>n3){
         *max2 = n1;
        }
        else {
        *max2 = n3;
    }
    
    }
    else{
        위와 비슷
    }
    
    

    2 ) 또한 이소스코드에서 &.* 가 무엇인지 모르겠네여. max(num1,num2,num3)값들은 getInput 함수에서 입력받은 숫자들인건가요?

    C++ 포인터와 참조자 공부를 조금더 하시면 쉽게 이해하실수 있으실거에요 ^ 구글에 검색하면 다나와용.

    &(참조자) 는 간단히 말하면 num1 값을 복사하듯이 넘기는게 아니라 주소 자체를 넘기는 거구요 *(포인터) 는 그 주소로 찾아가서 안에 들어있는 값을 보는거랍니다

  • C, C++ 같은 시스템에서 일반적으로 변수들은 해당 변수가 소속된 함수의 생성과 소멸과 같은 life time을 가지고 있습니다.

    변수들은 stack 에서 생성되고 관리되어지는 데요. 함수가 종료되면 해당 stack에 있던 변수들도 다 사라지게 됩니다.

    그렇지만 함수가 종료되더라도 그 변수를 보존하고 싶어질 수 있을 것입니다. 그럴 때에 stack 이 아닌 heap 메모리에 변수를 만들게 됩니다. 그것이 new 연산자가 하는 역할입니다.

    그래서 이 값이 stack에서 관리되지 않고 있기 때문에 프로그램에서는 이 변수 값이 도대체 어디에 있는지 모릅니다.

    그래서 이 변수값이 어디에 있는지 가르쳐줘야하고, 그것이 포인터입니다.

    이 때에 *와&은 포인터와 많이 관련되어 있습니다.

    제가 이렇게 말한다고 해도 이해하실 것 같지 않고, 더 고민하시면서 프로그래밍 하시다보면 자연스럽게 아시게 될 것이라고 생각합니다.

    파라미터도 다른건 없습니다. 다른게 있다면 포인터로 받는다는 것 뿐이고요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)