c++引用详解_c解引用

c++引用详解_c解引用引用 从C过来的同学可能会对C++中的“&”表示不解。“&”在C中就是表示取地址符,在C++的实践中,它也确实有取地址的功能。但是,在C++中,它的功能不止于此,它有了一个更准确的名称:引用。 引用是C++的引入的语言特性,它表示某一对象的别名。对象和对象的引用都指向同一地址,对引用

c++引用详解_c解引用"

引用

  从C过来的同学可能会对C++中的“&”表示不解。“&”在C中就是表示取地址符,在C++的实践中,它也确实有取地址的功能。但是,在C++中,它的功能不止于此,它有了一个更准确的名称:引用。

  引用是C++的引入的语言特性,它表示某一对象的别名。对象和对象的引用都指向同一地址,对引用的操作实际上就是对原对象的操作。引用的声明语法为:

  类型标识符 &引用名=目标变量名;

  说明:

  (1)&在此不是求地址运算,而是起标识作用。

  (2)类型标识符是指目标变量的类型。

  (3)声明引用时,必须同时对其进行初始化。

  (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

  (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

  (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

int main( ){
    int a=1;
    int &b=a;
    b=2;
    cout<<a<<endl;
}

//输出结果为2

引用的应用

  光是给变量取别名似乎并没有多大的意义,它的常见用法有下面几种:

1.函数引用传递

普通函数的参数传递为值传递,在调用时,会为形参分配存储单元,然后将实参的值赋给形参,相当于创建一了份实参的副本供函数使用。值传递有两个特征:

(1)在函数内对形参的操作不会影响实参

(2)当传入的数据量较大时,会浪费空间。

  为了解决传递大块数据时,值传递方式造成的空间浪费,C语言的做法是传递指针从而实现直接对原数据的操作。而在C++中,我们可以使用引用传递来解决这个问题。只需要将形参定义为引用的形式,例如:

#include <iostream>

using namespace std;

//引用传递的方式
void func(int &a){
    a=a+10;
}
//传统值传递的方式
void func1(int a){
    a=a+10;
}
int main( ){
    int a = 5,b=5;
    func(a);
    func1(b);
    cout<<a<<" "<<b<<endl;
}
//输出结果为15 5

  使用指针与引用的区别在于:使用指针时,虽然传递的是指针,但仍然是值传递的方式。指针也是变量,系统仍然会为形参分配空间。并且,大量使用指针,会导致程序可读性变差,且容易出错。

2.常引用

如果想使用引用,但又想确保引用数据的安全性,此时可以使用const关键字来定义常引用。常引用和常量一样,不允许被修改。

int main( ){
    int a = 1;
    const int &b = a;
    //当尝试通过引用修改变量时,程序会报错
    b=2;
}

解引用

  在C语言中”*”用来定义一个指针变量,它不表示实质的运算而仅仅起到标志的作用。但是在C++中“*”是一个一元运算符,叫做“解引用运算符”。它的作用是获取地址中存储的值。它的操作数必须是一个合法有效的地址数据。

int main( ){
    int a = 1;
    //创建指针b,存储a的地址
    int *b = &a;
    //对指针b中存储的地址进行解引用
    int c = *b;
    //输出结果为:1 0x61feb4 1
    cout<<a<<" "<<b<<" "<<c;
}

 

参考内容:https://www.cnblogs.com/mlgjb/p/8821340.html

今天的文章c++引用详解_c解引用分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/53712.html

(0)
编程小号编程小号
上一篇 2023-08-30 08:30
下一篇 2023-08-30 09:06

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注