- 引用和指针在指向发生变化时的不同表现:
- 引用:引用在初始化后,无法再改变其引用的对象,它始终绑定到初始化时的那个对象。这是因为引用本质上是对象的别名,一旦别名确定,就不能再指向其他对象。
- 指针:指针可以在其生命周期内指向不同的对象。指针存储的是对象的地址,通过修改存储的地址值,指针可以指向不同的对象。
- 代码示例:
#include <iostream>
int main() {
int num1 = 10;
int num2 = 20;
// 引用示例
int& ref = num1;
// ref = num2; // 这行代码是错误的,不能改变引用绑定的对象
std::cout << "引用ref的值: " << ref << std::endl;
// 指针示例
int* ptr = &num1;
std::cout << "指针ptr最初指向的值: " << *ptr << std::endl;
ptr = &num2;
std::cout << "指针ptr改变指向后的值: " << *ptr << std::endl;
return 0;
}
- 代码运行结果分析:
- 对于引用部分,
int& ref = num1;
创建了 num1
的引用 ref
,之后如果尝试像 ref = num2;
这样改变引用绑定的对象,编译器会报错。std::cout << "引用ref的值: " << ref << std::endl;
输出的是 num1
的值,即 10
。
- 对于指针部分,
int* ptr = &num1;
使指针 ptr
指向 num1
,std::cout << "指针ptr最初指向的值: " << *ptr << std::endl;
输出 num1
的值 10
。然后 ptr = &num2;
改变了指针 ptr
的指向,使其指向 num2
,std::cout << "指针ptr改变指向后的值: " << *ptr << std::endl;
输出 num2
的值 20
。