关于c ++:声明变量的区别


Difference in declaring a variable

我以以下方式声明了两个变量:

1
2
3
4
5
6
void main()
{
  int a = 20;
  int &b = a;
  cout<<a<<""<<b;
}

产量:20 20

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


Kindly advise what exactly happens when i write int &b = a and how is it different from the first declaration

在下面的示例中:

1
2
int a;
int & b = a;

b变量是指a变量的内存地址。变量b只是a的别名。

and also when to use which.

引用的一个常见用法是避免复制大型对象。与其传递(复制)大对象,不如传递对它的引用。

1
2
3
4
5
const std::string& Get_Tree_Name()
{
  static std::string name ="Eucalyptus";
  return name;
}

上面的函数返回对函数内部静态字符串的引用。因此,它不是在函数退出后复制字符串,而是传递一个引用。一般来说,一个引用所占空间比std::string对象小。

另一种用法是当函数修改其参数时:

1
2
3
4
5
6
7
8
9
10
void Get_Pi(double& pi_value)
{
  pi_value = 3.14159264;
}

int main()
{
  double my_pi = 0.0;
  Get_Pi(my_pi);
}

在上述示例的main函数中,由于引用机制,Get_Pi函数中的代码实际上是修改main函数中的my_pi变量。

如果没有引用,Get_Pi函数将修改my_pi变量的副本,而不是原始变量,因为参数是通过copy传递的。

指针与引用

函数修改其参数的另一种选择是通过指针传递参数。使用指针的一个问题是指针可以指向任何东西,不一定是变量。

传递引用意味着对象必须存在。与指针不同,引用不需要在运行时进行验证。编译器执行检查。这在安全关键系统中很重要。


1
Int a = 0;

这是一个简单的int变量,只能存储-32768到32768(2字节)

1
Int * b;

这也是一个变量,*意味着这个变量可以存储另一个变量的地址,而不是值。

1
b=&a;

现在,您如何将值放入指针中,在变量名之前写入&;将为您提供变量的地址,而不是变量值。

1
*b;

这如何从指针中获取值,这将给您一个值


在第一个变量中,为变量A赋值(A=20)在第二行中,您创建一个变量,并给出该变量的地址。现在b也指向a的地址。现在a和b指向的是相同的内存地址,即20。