왕초보의 참조변수에 대한 질문입니다.
이 성적 짜는 프로그램에서 함수를 호출할 때
cal(sungjuk &temp)를 하는데 왜 prn(sungjuk temp)하지 않는지요?
컴파일 할 때 뒤에걸로 하니깐 에러가 나는데 왜 &붙여서 하는지 궁금합니
다.
그리고 그 밑의 prn(sungjuk temp)는 temp에 &를 안 붙이는데 왜 그런지
앞의 것과의 차이점을 설명해 주시면 공부하는데 대단히 큰 도움이 될 것
같습니다.
#include
struct sungjuk{
char name[20];
int kor;
int eng;
int mat;
int tot;
float ave;
};
void cal(sungjuk &temp);
void prn(sungjuk temp);
void main()
{
sungjuk temp;
cout<<"\n이름을 입력하세요 => " ;
cin>> temp.name;
cout<<"\n국어점수를 입력하세요 => " ;
cin>> temp.kor;
cout<<"\n영어점수를 입력하세요 => " ;
cin>> temp.eng;
cout<<"\n수학점수를 입력하세요 => " ;
cin>> temp.mat;
cal(temp);
prn(temp);
}
void cal(sungjuk &temp)
{
temp.tot = temp.kor + temp.eng + temp.mat;
temp.ave = temp.tot / 3;
}
void prn(sungjuk temp)
{
cout << "\n 이름 " << temp.name ;
cout << "\n 국어 " << temp.kor ;
cout << "\n 영어 " << temp.eng ;
cout << "\n 수학 " << temp.mat ;
cout << "\n 총점 " << temp.tot ;
cout << "\n 평균 " << temp.ave ;
cout << "\n";
}
Re: 왕초보의 참조변수에 대한 질문입니다.
참조변수(reference)의 개념을 묻는 예제로군요. ^ ^
함수의 원형이 다음과 같네요.
void cal(sungjuk &temp);
void prn(sungjuk temp);
cal함수는 인자로 temp 참조변수를 넣고, prn은 temp변수를 call by value
형태로 넘겨주고 있죠.
참조변수는 쉽게, 한 변수의 별칭이라고 생각하면 됩니다.
C에서 포인터를 넘겨주고, *로 역참조를 해서 변수의 값을 얻고, 넘겨주
는 것이
가능한데요. 이렇게 하다보면, 코드가 복잡해지는 걸 피할 수 없죠. ^^;;
cal함수 내부에서 temp로 받은 객체의 정보를 변경하면, 호출한 부분의
변수가 변경이 되구요.
prn의 경우 temp변수에 념겨준 구조체 자체가 복사가 되어서 다른 변수에
저장됩니다. 즉 호출한 부분에서 변수의 변경은 이루어지지 않죠.
prn같은 경우 성적 구조체의 값을 출력만 하고 있는데, 이때는
인자의 타입명 앞에 대개 const를 붙여서, 함수 내부에서 인자를 바꾸지
않을
것을 명시적으로 선언해 줍니다.
----------------------------
void prn(const sungjuk temp);
----------------------------
물론 prn도 참조 변수의 형태로 나타내면
------------------------------
void prn(const sungjuk& temp);
------------------------------
이렇게 할 수 있겠죠.
댓글 달기