根据这些链接:stackoverflow question和C++ 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;
}
有人可以在上述两个代码中明确上述概念吗?
答案 0 :(得分:2)
在y=z
它没有引用另一个变量,只是将z
的值分配给y
为12,而y
引用x
,x
也获得了分配值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
的读取,因此只有第二个赋值保留。