引用&指针

1.引用

引用变量某个已存在变量的别名,一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向该变量

2.指针

指针是一个变量,它存储另一个变量的内存地址。指针可以在运行时被重新赋值,并且可以为空

3.区别

3.1引用必须赋初始值,指针可以不赋但不建议(因为可能会导致野指针问题)

引用不赋初始值是无法编译通过的

3.2引用只能指向一个变量从一而终

ref还是a的别名,没有变成b的别名

ref = b;并不是ref变成了b的别名,因为b本身就是一个值,所以这一步只是将b赋值给ref,同时因为ref是a的别名,所以a也修改了

3.3对引用赋值时对其指向的变量赋值,而并不是修改引用本身的值

int x = 5;
int &ref = x;
ref = 10;   // x 的值被修改为 10
int x = 5;
int *ptr = &x;
*ptr = 10;  // 通过解引用修改 x 的值为 10

3.4引用直接用对象的名字来访问所引用的对象,指针需使用解引用运算符 * 来访问指针所指向的对象

int x = 5;
int &ref = x;   // ref 是 x 的引用
std::cout << ref << std::endl;  // 直接访问 x 的值
 
int x = 5;
int *ptr = &x;
std::cout << *ptr << std::endl;  // 通过解引用访问 x 的值

3.5引用没有自己的内存地址,它是所引用对象的别名。不能获取引用本身的地址,只能获取它所引用的对象的地址;指针有自己的内存地址,存储的是它所指向对象的内存地址。可以获取指针的地址,也可以获取它指向的对象的地址

int x = 5;
int &ref = x;
std::cout << &ref << std::endl;  // 输出的是 x 的地址
 
int x = 5;
int *ptr = &x;
std::cout << ptr << std::endl;   // 输出的是指针存储的 x 的地址
std::cout << &ptr << std::endl;  // 输出的是指针本身的地址

3.6引用不能指向 nullptr 或者无效的对象;指针可以是 nullptr,表示不指向任何对象,或者指向无效的内存地址(虽然指向无效地址是危险的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值