C++(day03)

  (1)引用

(2)const引用

(3)引用传递

(4)引用作为函数返回值

(5)引用与指针区别

1、引用

   ¥引用是给一个变量起别名(引用不是变量,引用仅仅只是变量的别名,引用没有自己独立的空间,引用要与它所引用的变量共享空间,对引用所做的改变实际上           是对它所引用的变量的改变)

 ¥定义引用的一般格式:

  类型 &引用名 = 变量名;

  例如:int a = 1;

      int &b = a;  //b是a的别名,因此a和b是同一个单元

 ¥注意:定义引用时一定要初始化,指明该引用变量是谁的别名。

 ¥在实际应用中,引用一般用作参数传递与返回值。

复制代码
#include <iostream>
#include <cstdio>
using namespace std;

int main(void)
{
    int val = 100;
    //int& refval;   Error,引用必须初始化
    int& refval = val;
    refval = 200;    //将200赋值给refval,实际上改变的是val这个变量

    cout << "val = " << val << endl; //输出:val = 200

    int val2 = 500;
    refval = val2;  //不代表将refval引用至val2这个变量。仅仅只是代表将val2赋值给refval,引用一经初始化,不能重新指向其它变量

    cout << "val = " << val << endl; //输出:val = 500

    return 0;
}
复制代码

2、const引用

   ¥const引用是指向const对象的引用。

复制代码
#include <iostream>
#include <cstdio>
using namespace std;

int main(void)
{
    const int val = 1024;
    const int& refval = val;

    //int& ref2 = val;  //Error,nonconst reference to const object
    //refval = 200;       //Error,refval是一个常量

    int val2 = 1024;
    const int& ref3 = val2; //const reference to nonconst object

    double val3 = 3.14;
    const int& ref4 = val3;  //int temp = val3;
                             //const int& ref4 = temp;

    cout << "ref4 = " << ref4 << endl;
    cout << "val3 = " << val3 << endl;

    //int& ref5 = val3;   Error

    return 0;
}
复制代码

3、引用做为参数传递 

  ¥引用传递方式是在函数定义时在形参前面加上引用运算符“&”

        例如:swap(int& a,int &b);

  ¥按值传递方式容易理解,但形参值的改变不能对实参产生影响。

  ¥地址传递方式通过形参的改变使相应的实参改变,但程序容易产生错误且难以阅读。

  ¥引用作为参数对形参的任何操作都能改变相应的实参的数据,又使函数调用显得方便、自然。

复制代码
#include <iostream>
#include <cstdio>
using namespace std;

void swap(int& x, int& y)
{
    int temp = x;
           x = y;
           y = temp;
}

int main(void)
{
    int a = 5;
    int b = 6;

    swap(a, b);  // 在函数调用时,引用被初始化,x = a, y = b;

    cout << "a = " << a  << " b = " << b << endl;

    return 0;
}
复制代码

4、引用作为函数返回值

  ¥引用的另一个作用是用于返回引用的函数

  ¥函数返回引用的一个主要目的是可以将函数放在赋值运算符的左边。

  

复制代码
#include <iostream>
#include <cstdio>
using namespace std;

int a[] = {0,1,2,3,4};

int& index(int i)
{
    return a[i];
}

int main(void)
{
    index(3) = 100;  //引用作为函数返回值,使得函数可以放在赋值运算符左边,引用在函数返回的时候初始化

    cout << "a[3] = " << a[3] << endl;  //输出:a[3] = 100

    return 0;
}
复制代码

 

  ¥注意:不能返回对局部变量的引用。

复制代码
#include <iostream>
#include <cstdio>
using namespace std;

/*
不能返回局部变量的引用。
*/
int& add(int a, int b)
{
    int sum;
    sum = a + b;
    return sum;
     
}
int main(void)
{
    int n = add(3,4); //warning C4172: 返回局部变量或临时变量的地址: sum
    int& n2 = add(5,6);//n2的

    cout << "n2 = " << n2 << endl;//输出:n2 = 11  这里输出结果正确是假象,是因为局部变量sum释放的内存空间还为被占用,sun的值还存在
    cout << "n = " << n << endl; //输出: n = 7   
    cout << "n2 = " << n2 << endl; //输出:n2 = 2076481928 
                                    //n2是引用,没有自己独立的空间,n2的值依赖于它所引用的变量,如果n2所引用的变量生命周期结束了,也就是说n2是一个无效的引用,那么n2的值将是不确定的。

    return 0;
}
复制代码

5、引用与指针区别

  ¥引用访问一个变量是直接访问,而指针是间接访问,

  ¥引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间。

  ¥引用一经初始化不能再引用其它变量,而指针可以。

  ¥尽可能使用引用,不得已时使用指针。

  ¥几种传递的比较:

    值传递:实参要初始化形参数要分配空间,将实参内容拷贝到形参

    引用传递:实参初始化形参时不分配空间。

    指针传递:本质是值传递(地址),实参初始化形参的时候,也是分配空间的,分配的是4字节的空间,(32位系统),如果我们要修改指针的地址,单纯用指针传递也是不行的,用**    *&

 

  

posted @   今天天气好极了  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示