有人可以向我解释什么是“引用重新安置”,为什么不能“引用另一个对象(参考)”?

时间:2015-10-31 17:57:11

标签: c++ pointers reference

根据这些链接:stackoverflow questionC++ FQA引用在初始化后不能很好地引用另一个对象/变量,但下面的代码呢?

// Example program in C++
#include <iostream>
using namespace std;
int main()
{
    int x=10, z=12;
    int &y=x;
    ++y;
    y=z; //valid?
    cout << x << ", "<< y <<", " << z << endl; // prints 12, 12, 12
    return 0;
}

下面是关于指针重新设置的C代码,它似乎有效,我是对的吗?

#include <stdio.h>
int main(int argc, char *argv[])
{
    int a=10, b=20;
    int *ptr;   
    ptr = &a;
    ptr = &b;
    printf("%d\n",a); // prints 10
    printf("%d\n",*ptr); // prints 20
    return 0;
}

有人可以在上述两个代码中明确上述概念吗?

2 个答案:

答案 0 :(得分:2)

y=z

它没有引用另一个变量,只是将z的值分配给y为12,而y引用xx也获得了分配值12.

所以x=y=z=12

但是在指针中,它有效地改变它指向的地址:

ptr = &a;
ptr = &b; //valid

答案 1 :(得分:2)

y=z; //valid?

绝对!但是,这并不意味着“y从现在开始引用z”。这意味着“将z的值设置为当前所指的y”,即x。因此,y=z是撰写x=z的另一种方式。

  

下面是关于指针重新设置的C代码,它似乎有效,我是对的吗?

与引用不同,指针可以重新指向,因此重新指定指针使其指向不同的变量。但是,您的程序没有说明这一点,因为ptr的两个赋值发生时没有任何ptr的读取,因此只有第二个赋值保留。