C ++参考 - 我不清楚

时间:2015-02-28 18:52:23

标签: c++ reference

请参阅以下代码:

int x = 7;
int *p = &x;
int &y = x;

x = 7;
*p = 7;
y = 7;

x = 42;

x = 42;
*p = 42;
y = 42;

y = 73;

x = 73;
*p = 73;
y = 73;

为什么x = 73?

1 个答案:

答案 0 :(得分:0)

在很多方面,引用可以被视为“别名”,同一事物的另一个名称,因此xy是“相同的东西,只是不同的名称”。使用y代替x显然没有那么多,但如果你有一个漫长而复杂的事情,比如

 person individual;

 if (individual.scores.mathtest[testno] > 75 &&
     individual.scores.mathtest[testno] <= 100)
 {
    individual.scores.mathtest[testno] = 80;
 }

然后使用

int &score = individual.scores.mathtest[testno];

if (score > 75 && score <= 100)
{
   score = 80;
}

会减少写作量 - 并且更容易看到整个代码段中的内容相同 - 而不是试图发现该语句中某处是否存在差异。

如果您的示例,您可以将*p视为另一个别名。指针的属性与引用略有不同 - 例如,您可以更改指针实际指向的内容。我们可以补充一下:

int z = 8;
p = &z; 

现在*p不再是x的别名,而是z的别名。如果我们有:

int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
int *p = &a[0];

我们将*p作为数组中元素a[0]的别名,我们可以使用

p++; 

a[0]移至a[1]