카테고리 없음

[C++ 6-3] & - 주소연산자, 참조연산자

KimKyao 2024. 10. 25. 14:59

C++에서 주소 연산자(&)참조 연산자(&)는 서로 다른 목적으로 사용되며, 구문도 약간 다릅니다.

이를 구분하기 위해 간단한 예시를 들어 설명하겠습니다.

 

 

1. 주소 연산자(&)

주소 연산자는 변수의 메모리 주소를 반환하는 데 사용됩니다.

#include <iostream>
int main() {
    int a = 10;
    int* ptr = &a;  // a의 주소를 ptr에 저장

    std::cout << "a의 값: " << a << std::endl; // 10
    std::cout << "a의 주소: " << &a << std::endl; // 0x7ffd2c34a9b4
    std::cout << "ptr이 가리키는 값: " << *ptr << std::endl; // 10

    return 0;
}

// a --> 10
// &a --> 주소값
// *ptr --> 10
// ptr --> 주소값(&a)

 

 

  • 여기서 &a는 변수 a의 메모리 주소를 반환합니다.
  • ptr은 a의 주소를 가리키는 포인터로, *ptr을 사용하면 a의 값을 참조할 수 있습니다.

 

 

 

2. 참조 연산자(&)

참조 연산자는 참조 변수(레퍼런스)를 선언하는 데 사용되며, 이는 원래 변수의 별칭을 만드는 것입니다.

참조 변수는 특정 변수에 대한 또 다른 이름을 제공하여 동일한 메모리 위치를 가리킵니다.

#include <iostream>
int main() {
    int a = 10;
    int& ref = a;  // a에 대한 참조 변수 ref를 선언

    ref = 20;  // ref를 통해 a의 값을 변경

    std::cout << "a의 값: " << a << std::endl; // 20
    std::cout << "ref의 값: " << ref << std::endl; // 20

    return 0;
}
// a --> 20
// ref --> 20

 

  • 여기서 int& ref = a;는 a에 대한 참조 변수 ref를 선언합니다.
  • ref를 통해 a의 값을 변경할 수 있습니다. ref와 a는 동일한 메모리 위치를 공유합니다.

 

파라미터아규먼트로 사용할 때

#include <iostream>

// 포인터를 사용한 함수
void changeValue(int* ptr) {
    *ptr = 20;  // 포인터를 역참조하여 값을 변경
}

int main() {
    int a = 10;
    std::cout << "변경 전 a의 값: " << a << std::endl;

    changeValue(&a);  // 변수 a의 주소를 전달
    std::cout << "변경 후 a의 값: " << a << std::endl;

    return 0;
}

====================================================================

#include <iostream>

// 참조자를 사용한 함수
void changeValue(int& ref) {
    ref = 30;  // 참조를 통해 값을 변경
}

int main() {
    int a = 10;
    std::cout << "변경 전 a의 값: " << a << std::endl;

    changeValue(a);  // 변수 a의 참조를 전달
    std::cout << "변경 후 a의 값: " << a << std::endl;

    return 0;
}

======================================================================

void changeValue(int* ptr) {
    *ptr = 20;  // 포인터를 역참조하여 값을 변경
}
int a = 10;
changeValue(&a)


void changeValue(int& ref) {
    ref = 30;  // 참조를 통해 값을 변경
}

int a = 10;
changeValue(a)