C/C++编程笔记:C++中的引用!(含引用和指针的对比)
当将变量声明为引用时,它将成为现有变量的替代名称。通过在声明中添加“&”,可以将变量声明为引用。
C++:
输出: x = 20 ref= 30
应用范围:
修改函数中传递的参数:如果函数收到对变量的引用,则可以修改变量的值。例如,以下程序变量使用引用进行交换。
C++:
1.避免 复制大型结构:想象一个必须接收大型对象的函数。如果我们通过它而没有引用,则会创建它的新副本,这会浪费CPU时间和内存。我们可以使用引用来避免这种情况。
C++:
2.在“对于每个循环”中修改所有对象:我们可以在“对每个循环”中使用引用来修改所有元素
C++:
3.对于每个循环,避免 对象的复制:当对象较大时,我们可以在每个循环中使用引用来避免单个对象的复制。
C++:
参考与指针:
引用和指针都可以用于更改另一个函数内部的一个函数的局部变量。当作为参数传递给函数或从函数返回时,它们都还可以用于保存大对象的副本,以提高效率。尽管有上述相似之处,引用和指针之间还是存在以下差异。
1.可以将指针声明为void,但是引用永远不能为void。例如
整数a = 10;void * aa =&a;//有效无效
&ar = a; //无效
2.指针变量具有n级/多级间接寻址,即单指针,双指针,三指针。而参考变量仅具有一个/单个间接级别。以下代码揭示了上述要点:
引用的功能不如指针
1)创建引用后,以后就不能再引用其他对象了;它无法重新放置。这通常是通过指针完成的。
2)引用不能为NULL。指针通常被设置为NULL,以指示它们没有指向任何有效的对象。
3)引用必须在声明时进行初始化。指针没有这种限制
由于上述限制,C ++中的引用不能用于实现链接列表,树等数据结构。在Java中,引用没有上述限制,可以用于实现所有数据结构。Java中引用更强大是Java不需要指针的主要原因。
更安全,更易于使用:
1)更安全:由于必须先初始化引用,所以不太可能存在诸如野指针之类的野引用。仍然有一些引用不能引用有效位置
2)易于使用:引用不需要解引用运算符即可访问该值。它们可以像普通变量一样使用。仅在声明时才需要“&”运算符。同样,可以使用点运算符('。')访问对象引用的成员,这与需要箭头运算符(->)访问成员的指针不同。
结合上述原因,在诸如复制构造函数参数之类的地方很少有不能使用指针的地方。必须使用引用在复制构造函数中传递参数。同样,必须使用引用来重载某些运算符,例如++。
希望对你有帮助!