C언어 C++ Programming

[C/C++]포인터(*,Pointer)와 참조자란?(&, reference)

끄적끄적아무거나 2021. 12. 15. 19:16
반응형

 

목차

     

     

     

     

     

     

    [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이 나옴을 알 수 있습니다.

     

     

     

     

    반응형