[C++ 6-3] & - 주소연산자, 참조연산자
카테고리 없음 2024. 10. 25. 14:59C++에서 주소 연산자(&)와 참조 연산자(&)는 서로 다른 목적으로 사용되며, 구문도 약간 다릅니다.
이를 구분하기 위해 간단한 예시를 들어 설명하겠습니다.
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)
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
파라미터나 아규먼트로 사용할 때
#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)