C ++将变量的地址分配给另一个变量

时间:2018-10-28 14:49:16

标签: c++

在第一个代码中,这两个代码是相同的,据我了解,变量(a和b)共享相同的内存位置,但是在第二个代码中,它给出了一个错误,有什么区别?

还(int&a = b)如何工作? Arent我们通过写int&a = b?将内存位置分配给一个整数。

int b = 9;
    int &a = b;
    cout<< &a << endl;
    cout<< &b << endl;

  int b = 9;
    int a = 5;
    &a = &b;
    cout<< &a << endl;
    cout<< &b << endl;

3 个答案:

答案 0 :(得分:3)

  据我了解,

变量(a和b)共享相同的内存位置。

否。

a是参考变量。引用不是对象,也不一定完全存储在内存中。无法获得未存储在内存中的地址。取引用变量的地址将得到引用对象的地址。

  

Arent,我们通过写int&a = b

将内存位置分配给整数

不,我们不是。我们在声明一个引用变量,该变量初始化为引用b

  

但是在第二个中它给出了一个错误

addressof运算符的结果是一个右值。您不能分配给右值。在第一个示例中,您永远不会尝试分配给addressof运算符的结果。

答案 1 :(得分:0)

&a = &b;并没有您认为的那样。

&a是一个临时值,是一个右值,是指向a的指针。无法分配,因为它不存在。

答案 2 :(得分:0)

在第一个代码段中

router.post("/", authCheck, (req, res) =>  {
    console.log("this is post data")
    console.log(req.body) //This is logging undefined

})

int &a = b; /* valid syntax */ 是对a的引用,即ba都将具有相同的存储位置,或者b只是{{1}的另一个名称},没有为a创建单独的内存,它使用的是b的现有内存。

在第二个代码段中,

a

语句b无效,因为它导致int b = 9; int a = 5; &a = &b; /* invalid syntax */ 表达式。