我已经通过以下方式声明了两个变量:
void main()
{
int a = 20;
int &b = a;
cout<<a<<" "<<b;
}
输出:20 20
请告知我写int&amp; b = a时究竟发生了什么,它与第一个声明有什么不同,以及何时使用它。
答案 0 :(得分:2)
请告知我写int&amp; b = a时到底发生了什么,以及它与第一个声明有什么不同
在下面的例子中:
int a;
int & b = a;
b
变量是指a
变量的内存地址。变量b
只是a
的别名。
以及何时使用哪个。
引用的常见用法是避免复制大对象。您传递对它的引用,而不是传递(复制)大对象。
const std::string& Get_Tree_Name()
{
static std::string name = "Eucalyptus";
return name;
}
上面的函数将引用返回到函数内的静态字符串。因此,不是在函数退出后复制字符串,而是传递引用。通常,引用占用的空间比std::string
对象少。
另一种用法是当函数修改其参数时:
void Get_Pi(double& pi_value)
{
pi_value = 3.14159264;
}
int main()
{
double my_pi = 0.0;
Get_Pi(my_pi);
}
在上面示例的main
函数中,由于引用机制,Get_Pi
函数中的代码实际上正在修改my_pi
函数中的main
变量。
如果没有引用,Get_Pi
函数将修改 {/ 1}}变量的副本,而不是原始变量,因为参数是通过副本传递的。
指针与参考
修改其参数的函数的另一种替代方法是通过指针传递参数。使用指针的一个问题是指针可以指向任何而不一定是变量。
传递引用意味着对象必须存在。与指针不同,引用不需要在运行时进行验证。编译器执行检查。这在安全关键系统中很重要。
答案 1 :(得分:-2)
Int a = 0;
这是一个int的简单变量,只能存储-32768到32768(2字节)
Int * b;
这也是一个变量,*表示这个变量可以存储另一个变量的地址而不是值。
b=&a;
现在你把这个值放在一个指针,写作&amp;在变量名称之前将为您提供变量的地址而不是变量值。
*b;
这怎么可以从指针获取值,这将给你一个值
答案 2 :(得分:-3)
在第一个变量中,您要为变量a赋值(a = 20) 在第二行中,您创建一个变量并给出该变量的地址。 现在b也指向了一个地址。现在a和b指向相同的内存地址,即20。