[SSM 안드로이드 프레임워크 개발 강의 ] 5. 참조변수 편
#include<iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////
//주제 5. 참조 변수 이야기
//1. 개념 : 기존 메모리의 별명
//2.
////////////////////////////////////////////////////////////////////////////
int main(){
int n=10; //메모리 할당
int *p = &n;
int &r = n;
r = 20;
cout << n << endl;
//int &r2; // error 반드시 초기값이 필요하다.
int *& pr = p; //포린터의 별명 오~케이
//int &* rp = &r; //error 별명의 주소 번지 에러에러
int (&f)() = main; //함수의 별명
int & r3 = 10; //에러 참조변수를 강제로 지정해줄수는 없다.
const int & r4=10; // 상수는 상수에 넣을수 있다.
//int && r5 = 10;// 상수를 참조하는 문법 C++ 2.0에 등장
}
==========================================================================================
#include<iostream>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////////////
//참조변수와 함수 인자 이야기
//1. 어떤 함수가 인자의 값을 변경한다면 포인터나 참조 모두 좋지만 포인터가 가독성 측면에서는 좋다.
//2. 어떤 함수가 인자의 값을 변경하지 않는다면
//(A) built in type : call by value 가 더 좋다. foo(int) //
//(B) User Define Type : call by reference 가 좋다. foo(const Data&)
//
//
//////////////////////////////////////////////////////////////////////////////////////////
/*
//어떤 코드가 더좋을까?
void foo(int a){} //1
void foo(const int &a){} //2
*/
/*
void inc1(int n){++n;}
void inc2(int *p){++(*p);}
void inc3(int &r){++r;}
int main(){
int a = 1, b=1, c=1;
inc1(a); //실패 - call by value
inc2(&b); // 성공 - call by point
inc3(c); //성공 call by reference
cout << a << endl;
cout << b << endl;
cout << c << endl;
}*/
struct Data{
int data;
};
void foo(const Data & x) // call by value 는 인자값을 변경하지 않을것이라는 약속이다.
{ //하지만 메모리 사용량이 2배가 된다.
//되도록이면 const & 를 사용하자!
x=10;
}
int main(){
Data a = 0;
int a =10;
foo(a); //이 함수는 절대 a 의 값을 변경하면 안된다.
cout << a<<endl; // a= 0이 나와야 한다.
}