C++的引用定义语法和应用

简介: C++的引用定义语法和应用

一、什么是引用

在C++中,引入引用就是为了避免指针在使用过程中可能出现的问题(空指针,不合法内存),提高程序的安全性。


引用是一种关系型声明的类型,说明它跟别的变量的关系,它所声明的变量不占内存空间,通俗来讲,是已有变量的别名,来说明跟已有变量的关系,所以引用变量的类型要跟已有变量的类型保持一致。


引用引入分析:


二、引用的基本语法和注意事项

语法:type* — 代表指针

type & ---> 引用类型  比如: int& ,char&
int --- int*(指针类型跟指向的类型保持一致)
在声明引用变量时,一定要说明跟其他变量的关系(必须初始化)
int i;
int& ri = i; //说明ri是i的别名,ri是引用类型声明变量

//[1] 引用的基本概念 type&
    int i = 10;
    int& ri = i; //必须初始化,要说明跟某个变量的关系
    cout << "ri = " << ri << "i = "<< i<< endl;//10 10
    cout << "&ri = " <<  &ri << "    "<< "&i = " << &i << endl; //地址相同

    ri = 20;
    cout << "ri = " << ri << "i = "<< i<< endl;  //20 20 

    i = 30;
    cout << "ri = " << ri << "i = "<< i<< endl; //30 30

//[2] 注意事项
    //[2.1]
    int j = i;  //int j = 100; ---> 其他的基本数据类型可以使用常量和变量来初始化
    //int & rj = 100; //error 这种方式声明的引用,把它叫作普通引用,普通引用不能使用常量来初始化,内存地址不确定
    //[2.2]
    int &rj = j; //rj就是j的别名,跟j代表着同一块内存空间,引用一经初始化,不可更改
    rj = i; //将变量i的值,赋值给rj,并不是初始化,使用类型声明一个变量时给它赋值,才是初始化
    //[2.3]
    int& rrj = rj; //引用可以多次被引用 多次被引用的结果就是一个变量有多个别名

    cout << "rrj = " << rrj << "rj = " << rj << "j = " << j << "i = " << i << endl;
    //[2.4]
    // &符号前有数据类型时为引用 ,其他情况下,为取地址


三、引用的应用

对于引用而言,如果只在一个函数中使用变量,没有必要使用引用,使用基本的数据类型就可以,基本的数据类型除了在函数中可以用来声明变量之外,还可以做函数的形参、函数的返回值。

1、引用做为函数的形参

引用做为函数的形参,那么该参数采用是址传递

void changeA(int& aa) //引用做为函数形参时,可以不初始化
{

    aa = 20;
}

void changeAA(int* p)
{
    if(p != nullptr)
    {
        *p = 50;
    }

}

void test(int a[]) //int* a
{

   //sizeof(a) = ?
}

void test1(int a[1000]) //int* a
{
   //sizeof(a) = ?
}

void test2(int a[5])
{
  //sizeof(a) = ?
}
//编译器将以上三个函数都变成 void test2(int *a) void test1(int* a) void test(int *a)

//数组做为函数形参时,会自动退化为指针
int main()
{
    //[1] 通过一个函数,来修改外部变量的值
    int a = 10;

    changeA(a);
    cout << "a = " << a << endl;

    changeAA(&a);
    cout << "a = " << a << endl;

    int b[5];
    test(b);
    test1(b);

    return 0;
}
相关文章
|
15天前
|
编译器 C++ 开发者
C++一分钟之-属性(attributes)与属性语法
【7月更文挑战第3天】C++的属性(attributes)自C++11起允许附加编译器指令,如`[[nodiscard]]`和`[[maybe_unused]]`,影响优化和警告。注意属性放置、兼容性和适度使用,以确保代码清晰和可移植。示例展示了如何使用属性来提示编译器处理返回值和未使用变量,以及利用编译器扩展进行自动清理。属性是提升代码质量的工具,但应谨慎使用。
36 13
|
6天前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
20天前
|
编译器 程序员 C++
C++一分钟之-属性(attributed)与属性语法
【6月更文挑战第28天】C++的属性为代码添加元数据,帮助编译器理解意图。C++11引入属性语法`[[attribute]]`,但支持取决于编译器。常见属性如`nodiscard`提示检查返回值,`maybe_unused`防止未使用警告。问题包括兼容性、过度依赖和误用。使用属性时需谨慎,确保团队共识,适时更新以适应C++新特性。通过示例展示了`nodiscard`和`likely/unlikely`的用法,强调正确使用属性能提升代码质量和性能。
35 13
|
22天前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
38 5
|
22天前
|
C++
C++引用
C++引用
11 1
|
24天前
|
编译器 C语言 C++
|
26天前
|
关系型数据库 MySQL 测试技术
技术分享:深入C++时间操作函数的应用与实践
技术分享:深入C++时间操作函数的应用与实践
23 1
|
1月前
|
数据安全/隐私保护 C++
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
C++ 中的类是一种用户定义的数据类型,用于表示具有相似特征和行为的对象的模板。
|
15天前
|
C++
C++基础知识(二:引用和new delete)
引用是C++中的一种复合类型,它是某个已存在变量的别名,也就是说引用不是独立的实体,它只是为已存在的变量取了一个新名字。一旦引用被初始化为某个变量,就不能改变引用到另一个变量。引用的主要用途包括函数参数传递、操作符重载等,它可以避免复制大对象的开销,并且使得代码更加直观易读。
|
16天前
|
存储 自然语言处理 编译器