声明变量的区别

时间:2017-09-14 17:50:25

标签: c++

我已经通过以下方式声明了两个变量:

void main()
{
  int a = 20;
  int &b = a;
  cout<<a<<" "<<b;
}

输出:20 20

请告知我写int&amp; b = a时究竟发生了什么,它与第一个声明有什么不同,以及何时使用它。

3 个答案:

答案 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。