목차
[C/C++ 언어] 참조자란?(&, reference)
C언어 코딩을 보다 보면 변수 앞에 & 기호가 붙어 있는 경우를 종종 볼 수 있습니다. 여기서 &기호를 변수에 붙힌 것을 참조자라고 합니다.
코드>>
#include <iostream>
using namespace std;
int main()
{
int a_var = 100;
int &b_var = a_var;
int &c_var = b_var;
cout << a_var << "\n";
cout << b_var << "\n";
cout << c_var << "\n";
cout << &a_var << "\n";
cout << &b_var << "\n";
cout << &c_var << "\n";
return 0;
}
결과>>
100
100
100
000000FA1C71F6A4
000000FA1C71F6A4
000000FA1C71F6A4
C언어를 컴파일(Compile)하면 메모리에 변수 값이 들어가고 메모리 주소에 변수가 할당되는 것입니다. 여기서 &(참조자)를 사용하면 a_var에 할당된 메모리 주소를 b_var와 c_var가 같이 사용하게 되는 것입니다.
마치 메모리가 여러개의 이름을 가지게 되는 것입니다. 그래서 결과에서도 확인할 수 있듯이 메모리 주소는 3개의 변수 동일하게 나옵니다.
즉 000000FA1C71F6A4 주소값은 a_var, b_var, c_var 라는 3개의 이름을 가지게 된 것입니다.
참조자는 메모리 주소를 가지는 변수(Variable)에 할당이 가능 하지만 값(Value)에 직접적으로 할당을 할 수 없습니다.
[C/C++ 언어] 포인터란?(*, Pointer)
포인터(Pointer)는 메모리 주소를 저장하는 변수 입니다. 앞서 참조자가 메모리 주소를 알려주는 이름이였고 즉, 메모리 주소와 연결되어 있음을 확인했습니다.
포인터는 메모리 주소를 자신의 메모리 공간에 저장하는 개념입니다.
예제 코드>>
#include <iostream>
using namespace std;
int main()
{
int a_var = 100;
int *b_var = &a_var;
cout << a_var << "\n";
cout << b_var << "\n";
cout << &a_var << "\n";
cout << &b_var << "\n";
cout << *b_var << "\n";
return 0;
}
결과>>
100
0000001EF27DFCB4
0000001EF27DFCB4
0000001EF27DFCD8
100
위 코드에서 볼 수 있듯이 7번째 라인에서 포인트(Pointer)를 사용해서 a_var의 주소값을 b_var에 저장하였습니다. 재밌는 점은 10번과 13번 라인의 결과를 통해 b_var가 참조하는 주소와 가지고 있는 값 모두 a_var의 주소 값입니다.
14번 라인의 *b_var는 b_var 주소 값이 포인트(*) 하는 값을 가져오라는 의미이고 100이 나옴을 알 수 있습니다.
'C언어 C++ Programming' 카테고리의 다른 글
[C++언어] Public, Private 차이와 사용방법 (0) | 2021.12.21 |
---|---|
[C/C++언어]함수 입력 값, Function(input, &input, input=x) (0) | 2021.12.17 |
[C++언어] 정수, 실수를 문자열로 변경하기(int, float, double to string) (0) | 2021.12.15 |
[C++언어] 문자열 정수, 실수로 변경하기(string to int, float, double, stringstream) (0) | 2021.12.14 |
[C/C++]연산자(Operator) 정리표 (비트, 논리, 산술 +=&^<<>>%~!) (0) | 2021.12.13 |