C++ 참조, 할당, 함수 호출 및 반환 값

인용하다

  1. 참조는 변수의 별칭을 지정하는 것입니다. 구문은 다음과 같습니다.数据类型 &别名 = 原名

참고 1:

  1. 참조를 초기화해야 합니다.
  2. 참조 초기화 후에는 변경할 수 없습니다.
int a = 10;
int &b = a; // b和a指向同一块内存

int &b; // 错误:没有初始化

int c = 20;
b = c; // 错误:这个写法不是更改引用b,而是把c的值 赋给 b指向的内存,这时候 a和b指向的值都改了

노트 2:

  1. 값을 전달하면 새 메모리 공간이 열립니다(데이터 사본 복사). 공식 매개변수 변경은 실제 매개변수에 영향을 미치지 않습니다.
void swap(a,b) {
    
    
	int temp = a; // 函数运行的时候,会单独再开辟新的 a b temp 内存空间
	a = b;
	b = temp;
	return;
}

void main() {
    
    
	int a = 10;
	int b = 20;
	swap(a,b);
	cout << a << b << endl; // 此时a,b的值并没有发生变化,因为是值传递,形参改变不影响实参
}

  1. 주소가 전달되면 공식 매개변수가 실제 매개변수를 수정할 수 있습니다.
void swap(int* p1, int* p2) {
    
    
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

void main() {
    
    
	int a = 10;
	int b = 20;
	swap(&a, &b); // 此时a,b的值已经被交换了。地址传递可以改变实参的值
}

참조의 본질은 포인터 상수입니다.

포인터의 포인팅은 변경할 수 없지만 포인터가 가리키는 값은 변경할 수 있습니다.

int a = 10;
int &b = a; // 等价于: int * const b = &a
b = 20; // 等价于: *b = 20 编译器优化

적용: 오용 방지를 위한 공식 매개변수 수정

void func(const int& a) {
    
    
	a = 100; // 错误:形参加了const之后,函数内部不可以再修改该参数的值
	cout << v << endl;
}

int main() {
    
    
	int a = 10;
	func(a);
}

잘못된 사용법:

int &b = 10; // 错误:不能编译。引用必须是合法内存空间

올바른 (컴파일 패스) 사용법:

const int &b = 10; // 可以编译。等价于:int tmep = 10; const int &b = temp;编译器优化
b = 1000; // 错误:加了const后不可以修改变量

참조로 반환 값
https://blog.csdn.net/weixin_41648259/article/details/106037151

추천

출처blog.csdn.net/qxqxqzzz/article/details/127342899