주소 연산자(&)와 역참조 연산자(*)
int value = 3;
//*를 변수를 선언할 때 타입 뒤(혹은 변수명 앞)에 붙여서 주소 타입의 변수로 지정
int *ptr = &value; //&는 변수 앞에 붙여서 해당 변수의 주소를 가져옴
//*를 주소값 변수 앞에 붙여서 해당 주소에 존재하는 변수에 접근
*ptr = 4;
*와 &는 각각 단항 연산자로서 다음과 같은 역할을 한다.
주소 연산자 (address-of operator)
&value
&연산자는 해당 변수의 주소를 가져오는데 사용된다.
역참조 연산자 (dereference operator)
*ptr
주소값인 ptr 변수의 주소에 존재하는 value 값에 접근할 수 있다.
ptr는 &value와 같고 *ptr는 value와 같다.
Call by value(값에 의한 호출)는 인자로 받은 값을 복사하여 처리를 한다. Call by reference(참조에 의한 호출)는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. 간단히 말해 값을 복사를 하여 처리를 하느냐, 아니면 직접 참조를 하느냐 차이인 것이다.
프로그래밍 구조상 Call by value(값에 의한 호출)를 하면 복사가 되기 때문에 메모리량이 늘어난다. 요즘에는 기기의 성능이 좋아져서 상관이 없다지만 많은 계산이 들어간다면 과부하의 원인이 된다. 하지만 복사처리가 되기 때문에 원래의 값은 영향을 받지 않아서 안전하다.
Call by value(값에 의한 호출)
- 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다.
- 단점 : 복사를 하기 때문에 메모리가 사용량이 늘어난다.
Call by reference(참조에 의한 호출)
- 장점 : 복사하지 않고 직접 참조를 하기에 빠르다.
- 단점 : 직접 참조를 하기에 원래 값이 영향을 받는다.(리스크)
출처 주소 : codingplus.tistory.com/29
'C++ > Basic' 카테고리의 다른 글
함수 포인터 (0) | 2021.05.17 |
---|---|
포인터와 레퍼런스의 차이 (0) | 2021.05.13 |
문자열 관리 (0) | 2021.04.27 |
알파벳 대소문자 관리 (0) | 2021.04.27 |
루프의 순서도 (0) | 2021.04.20 |