126人参与 • 2025-03-04 • C/C++
左值引用与指针有哪些区别?
脑子里闪过很多答案,但大部分都是各自的定义,真要说他们两个有什么区别,有的时候还这是说不上来。
本文针对这个问题进行归纳总结,希望对大家有所帮助。
void rrefttest(int&& ref)
{
std::cout<<"ref = "<<ref<<std::endl;
}
int main(int argc, char *argv[])
{
cout<<endl;
int x = 42;
int& ref = x;
int* ptr = &x;
int&& rref = 4;
// 输出地址
std::cout << "x的地址: " << &x << std::endl;
std::cout << "ref的地址: " << &ref << std::endl;
std::cout << "ptr的地址: " << &ptr << std::endl;
std::cout << "ptr指向的地址: " << ptr << std::endl;
std::cout << "rref指向的地址: " << rref << std::endl;
std::cout << "rref指向的地址: " << &rref << std::endl;
rrefttest(rref);
// 输出大小
std::cout << "引用的大小: " << sizeof(ref) << std::endl; // 与int相同
std::cout << "指针的大小: " << sizeof(ptr) << std::endl; // 通常是4或8字节
return 0;
}
//输出如下所示:
x的地址: 0x63fdbc
ref的地址: 0x63fdbc
ptr的地址:: 0x63fdb0
ptr指向的地址: 0x63fdbc
rref指向的地址: 4
rref指向的地址: 0x63fdec
引用的大小: 4
指针的大小: 8具体的例证程序如下:
//初始化
void initializationdifference() {
int x = 42;
// 引用必须在声明时初始化
int& ref = x; // 正确
int& ref2; // 错误!引用必须初始化
// 指针可以后续初始化
int* ptr; // 正确
ptr = &x; // 正确
}
void rebindingtest() {
int x = 42;
int y = 24;
// 引用一旦绑定就不能改变
int& ref = x;
ref = y; // 这是赋值操作,不是重新绑定
// 指针可以随时改变指向
int* ptr = &x;
ptr = &y; // 改变指针指向
}
//重复引用
void multileveltest() {
int x = 42;
// 不存在引用的引用
// int& & ref; // 错误!
// 可以有多级指针
int* ptr = &x;
int** pptr = &ptr; // 正确
}以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论