- 主题:“指针和引用的本质区别是什么?”
我觉得应该是能否进行加减这种运算吧
有人答“一个用*声明和访问内容, 一个用&声明, 直接访问”, 应该怎么办?
--
FROM 80.76.206.*
区别多了去了,引用还能sizeof,指针还能空...
--
FROM 152.78.0.*
引用一样加减:
A& a1 = v[0];
A& a2 = *(&a1 + 1);
如果说语义层面,区别就只有能否为空和能否指向另一个对象了。
【 在 SHENOK (石室食士) 的大作中提到: 】
: 标 题: “指针和引用的本质区别是什么?”
: 发信站: 水木社区 (Thu Jan 16 00:40:07 2020), 站内
:
: 我觉得应该是能否进行加减这种运算吧
:
: 有人答“一个用*声明和访问内容, 一个用&声明, 直接访问”, 应该怎么办?
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 80.76.206.*]
--
FROM 76.126.252.*
这个回答在语言层面的,也没啥毛病。引用在逻辑上可以视为某个东西的别名。
当然了,就是指针可以修改指向,引用初始化以后不能改了。这个是一个主要的区别。
另外就是引用不用担心是否为 null。
【 在 SHENOK (石室食士) 的大作中提到: 】
: 我觉得应该是能否进行加减这种运算吧
: 有人答“一个用*声明和访问内容, 一个用&声明, 直接访问”, 应该怎么办?
--
修改:hoodlum FROM 139.226.154.*
FROM 139.226.154.*
指针本质上是一个内存变量,占用机器数据位宽那么长的内存空间,比如32bit或64bit
可以在运行时修改
而引用本质上是编译时就定好的一个常数,不占用内存空间,只是另外一个变量的内存地址的别名
【 在 SHENOK 的大作中提到: 】
: 我觉得应该是能否进行加减这种运算吧
:
: 有人答“一个用*声明和访问内容, 一个用&声明, 直接访问”, 应该怎么办?
- 来自「最水木 for iPhone 11 Pro Max」
--
FROM 101.87.104.*
这个完全不对。
指针也有右值的,也是地址值。
引用也有不是编译期常量甚至不是常量的。
【 在 Xaoyao (劳动最光荣) 的大作中提到: 】
: 标 题: Re: “指针和引用的本质区别是什么?”
: 发信站: 水木社区 (Thu Jan 16 04:11:07 2020), 站内
:
: 指针本质上是一个内存变量,占用机器数据位宽那么长的内存空间,比如32bit或64bit
: 可以在运行时修改
: 而引用本质上是编译时就定好的一个常数,不占用内存空间,只是另外一个变量的内存地址的别名
:
: 【 在 SHENOK 的大作中提到: 】
: : 我觉得应该是能否进行加减这种运算吧
: :
: : 有人答“一个用*声明和访问内容, 一个用&声明, 直接访问”, 应该怎么办?
:
: - 来自「最水木 for iPhone 11 Pro Max」
: --
:
: ※ 来源:·最水木 客户端·[FROM: 101.87.104.*]
--
FROM 76.126.252.*
你这相当于hack了引用的实现方案了吧
理论上引用可以取消取址操作
我个人理解最大的区别就和楼主说的一样,引用就是不支持加减操作
【 在 here080 的大作中提到: 】
: 引用一样加减:
: A& a1 = v[0];
: A& a2 = *(&a1 + 1);
: ....................
- 来自「最水木 for iPhone 6s」
--
FROM 104.133.8.*
引用不能取消地址操作。
加减根本不重要。
【 在 lambdai (lambdai) 的大作中提到: 】
: 标 题: Re: “指针和引用的本质区别是什么?”
: 发信站: 水木社区 (Thu Jan 16 05:53:04 2020), 站内
:
: 你这相当于hack了引用的实现方案了吧
: 理论上引用可以取消取址操作
:
: 我个人理解最大的区别就和楼主说的一样,引用就是不支持加减操作
:
: 【 在 here080 的大作中提到: 】
: : 引用一样加减:
: : A& a1 = v[0];
: : A& a2 = *(&a1 + 1);
: : ....................
:
: - 来自「最水木 for iPhone 6s」
: --
:
: ※ 来源:·最水木 客户端·[FROM: 104.133.8.*]
--
FROM 76.126.252.*
指针是地址,引用是别名
因此指针可以被申明为哪里也不指,nullptr or unintialized,地址本身也可以进行算数运算。
引用是别名,所以要求被赋予别名的东西事先存在(initialized),即使这个东西是被 fake 出来的,不能声明一个没有本体的引用
int data = 1;
int &a = data; // ref to real stuff, good
int &b = *((int*)0x123); //fake stuff, still good, but will explode when you access the value of it.
int &c; //bad, won't compile
int* p; //good
int* q = &data; //good
【 在 SHENOK (石室食士) 的大作中提到: 】
: 我觉得应该是能否进行加减这种运算吧
: 有人答“一个用*声明和访问内容, 一个用&声明, 直接访问”, 应该怎么办?
--
FROM 203.110.132.*
这个解释靠谱!
【 在 iRoNcOoL 的大作中提到: 】
: 指针是地址,引用是别名
:
: 因此指针可以被申明为哪里也不指,nullptr or unintialized,地址本身也可以进行算数运算。
: ....................
--
FROM 171.113.247.*