C++中&运算符在引用与指针中的歧义及相关疑问
C++引用语法与取地址运算符的常见疑问解答
一、两种引用写法完全等价,区分看上下文
C++里引用声明的空格不影响语法,int& my_reference = my_int;和float &sum = total;都是合法的引用声明,编译器会把它们视作完全相同的写法——本质都是声明一个对应类型的引用,绑定到右侧的变量上。
要区分&是引用声明还是取地址运算符,只看场景:
- 如果是在变量声明语句里(也就是定义新变量的时候),不管
&和类型之间有没有空格,都是引用声明。比如float &sum = total;是声明引用,因为这是在定义新变量sum,它的类型是float&。 - 如果是在普通表达式里(比如赋值语句的右侧、函数调用的实参位置),
&就是取地址运算符,用来获取变量的内存地址。比如ptr = &my_int;里的&就是取地址,这是给已有的指针变量ptr赋值,不是声明新变量。
二、引用是变量别名,不能手动指定地址;指针是独立的地址存储变量
引用从诞生起就必须绑定到一个已存在的变量上,并且一辈子都不能换绑定对象——它不是独立的内存实体,只是原变量的“另一个名字”,所以你根本没法像指针那样手动给它分配地址(比如int &my_int = [新地址]这种写法完全不合法)。
而指针本身是一个独立的变量,它的作用就是存储内存地址,所以你可以用ptr = &my_int;把my_int的地址赋值给它,后续还能让它指向其他符合类型要求的对象。
内容的提问来源于stack exchange,提问作者Tan Yu Hau Sean
相关产品推荐
相关产品推荐

