2017-09-14 62 views
-5

我在以下几个方面定义了两个变量:差异声明一个变量

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

输出:20 20

请告知到底发生了什么,当我写INT & B = A和它是如何不同从第一次宣言开始,也是何时使用哪个。

+0

你试过编译这个吗?如果你这样做了,并且编译了它,你的编译器就坏掉了。 –

+4

听起来像你可以使用[良好的C++书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – NathanOliver

+0

和现代编译器。 – LogicStuff

回答

-2
Int a = 0; 

这为int的简单变量,它可以仅存储-32768至32768(2个字节)

Int * b; 

这也可变,则*表示该vatiable可以存储一些另一个变量的地址没有价值。

b=&a; 

现在这个怎么你把价值指针,写&前一个变量名会给你的变量,而不是变量值的一个地址。

*b; 

这如何从一个指针获取值,这会给你的

+1

“-32768至32768(2字节)”不正确。 int的大小由编译器inmplementer设置。 “int”的最小大小是16位(2字节)。较高的大小是无界的,但没有多少实现超过64位(8字节)。以下是关于数据类型大小和范围的页面:http://en.cppreference.com/w/cpp/language/types – user4581301

+1

此答案的其余部分讨论指针。这个问题并没有问关于指针。这是询问有关参考。 – user4581301

+0

那么有多少数字可以放在8个字节? –

-3

在第一可变要分配值给变量A(A = 20) 在创建第二行的值一个变量并给出该变量的地址。 现在b也指出了a的地址。现在,A和B都指向同一个内存ADRESS这是20

+0

处理参考文献时指针可能涉及或可能不涉及。编译器完全有权在同一个内存位置简单地使用两个名称。 – user4581301

+0

但是指针是我们可以存储地址的唯一东西。 –

+0

And&b = a意味着b的地址等于a。意思是现在b也指向一个 –

2

请告知当我写INT & 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功能的代码被实际修改由于在main功能的my_pi变量,参考机制。

没有引用的Get_Pi功能将修改副本my_pi变量,而不是原来的变量,因为参数是通过复制传递。

指针与引用

另一种替代方法为修改其参数的函数是通过指针传递参数。使用指针的一个问题是指针可能指向任何东西而不一定是变量。

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