본문 바로가기

컴퓨터 과학 & 영상처리 관련/C / C++

실인수와 가인수, 별명;참조(&)

함수를 이용할 대 호출하는 족과 정의된 쪽 모두에서 인수를 지정하는데, c언어에서는 이 둘을 구분하여 호출하는 쪽을 실인수, 정의된 쪽을 가인수라고 한다. 실인수와 가인수의 값을 주고받는 방법에 따라 값에 의한 전달, 참조에 의한 전달이 있다. 


참조에 의한 전달 - 실인수와 가인수가 같은 곳을 참조하는 형태로 인수를 함수에 전달


실제로는 주소를 가지고 있는 주소 값을 인자로 주는..값에 의한 전달밖에는 없지만..머..


int num;

int& newnum = num;

newnum = 13;


이러고 출력하면 둘다 13이 값이됨...걍 동일 엑세스..포인터랑 좀 다른듯


int num;

int* newnum = #    //이때의 & 는 주소값...별명은 아니고


*newnum = 400;    //포인터의 경우 *를 붙여서 접근해야되서 귀찮음



void changeValue(double &a)  //인수를 참조로 선언

{

a = 200;     //address 전달일 때처럼 *를 붙여서 엑세스할 필요가 없다.

}


int main()

{

double num1 = 100;

cout<<"num1 = "<<num1<<endl;

changeValue(num1);     //값을 전달할 변수를 적는다

cout<<"num1 = "<<num1<<endl;

return 0;

}


결과

num1 = 100

num1 = 200



참고로 주소에 의한 전달로 호출할시


Person shain1 = {"shiori", 18};

printfPersonPtr(&shain1);



void printPersonPtr(const Person *psn)

{

}


선언

call by refference(int *a);  //참조

call by address(int &a);  //주소

call by value(int a);  //값


호출시

call by refference(a);  //참조

call by address(&a);  //주소

call by value(a);  //값

두개가 호출하는 방법이 같기 때문에 인수의 값이 변경되는건지 알 수가 없다