C++语言基础(8)-引用

类似于Java,C++中也有引用类型,具体用法如下:

一.引用的基本用法

#include <iostream>
using namespace std;

int main(){
    int a = 99;
    int &b = a;
    cout<<a<<", "<<b<<endl;
    cout<<&a<<", "<<&b<<endl;

    return 0;
}

运行结果:
99, 99
0x28ff44, 0x28ff44

如果不希望通过引用修改原始数据的值,可以在定义时添加const限制:

const int &b = a; // 或
int const &b = a;

注意:引用在定义时需要添加&,在使用时不能添加&,使用时添加&表示取地址

二.引用作为函数参数

#include <iostream>
using namespace std;

void swap3(int &a, int &b);

int main(){
    int num1, num2;

    cout<<"Input two integers: ";
    cin>>num1>>num2;
    swap3(num1, num2);
    cout<<num1<<" "<<num2<<endl;

    return 0;
}

void swap3(int &a, int &b){
    int temp = a;
    a = b;
    b = temp;
} 

运行结果:

Input two integers: 12 34
12 34
Input two integers: 88 99
99 88
Input two integers: 100 200
200 100

三.引用作为函数返回值

引用除了可以作为函数形参,还可以作为函数返回值,请看下面的例子:

#include <iostream>
using namespace std;
int &plus10(int &n){
    n = n + 10;
    return n;
}
int main(){
    int num1 = 10;
    int num2 = plus10(num1);
    cout<<num1<<" "<<num2<<endl;
    return 0;
}

运行结果:

20 20

注意:在将引用作为函数返回值时应该注意一个小问题,就是不能返回局部数据(例如局部变量局部对象局部数组等)的引用,因为当函数调用完成后局部数据就会被销毁,有可能在下次使用时数据就不存在了,C++ 编译器检测到该行为时也会给出警告。

因此像下面的写法是不正确的:

#include <iostream>
using namespace std;
int &plus10(int &n){
    int m = n + 10;
    return m;  //返回局部数据的引用
}
int main(){
    int num1 = 10;
    int num2 = plus10(num1);
    cout<<num2<<endl;
    int &num3 = plus10(num1);
    int &num4 = plus10(num3);
    cout<<num3<<" "<<num4<<endl;
    return 0;
}

不能将局部变量m返回!因为函数是在栈上运行的,并且运行结束后会放弃对所有局部数据的管理权,后面的函数调用会覆盖前面函数的局部数据。本例中,第二次调用 plus10() 会覆盖第一次调用 plus10() 所产生的局部数据,第三次调用 plus10() 会覆盖第二次调用 plus10() 所产生的局部数据。

时间: 2024-11-06 03:34:26

C++语言基础(8)-引用的相关文章

Swift语言指南(一)--语言基础之常量和变量

Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swift 提供了 C 与 Objective-C 中的所有基础类型,包括表示整数的 Int,表示浮点数的 Double 与 Float,表示布尔值的 Bool,以及表示纯文本数据的 String. Swift 还为两个基本集合类型 Array 与 Dictionary 提供了强大的支持,详情可参考 (集合类型)Collection Types. 与 C 语言类

02 java语言基础

常量:字面值常量(字符串,字符,整数,小数,布尔,null),自定义常量,''这个不是字符常量,""这个是字符串常量 进制: 02.01_Java语言基础(常量的概述和使用)(掌握) A:什么是常量 在程序执行的过程中其值不可以发生改变 B:Java中常量的分类 字面值常量 自定义常量(面向对象部分讲) C:字面值常量的分类 字符串常量 用双引号括起来的内容 整数常量 所有整数 小数常量 所有小数 字符常量 用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号 布尔常量 较为特

C#语言基础

第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了一个强大的.易用的.逻辑结构一致的设计环境.其特点: 语言简洁 保留了C++的强大功能: 快速应用开发功能: 语言的的自由性: 强大的Web服务器控件: 支持跨平台: 与XML相融合: 第二部分 C#语言基础: 一.C#项目的组成结构: 1.项目后缀 .config——配置文件(存放配置参数文件)

C语言基础要点

和修房子打地基是一个道理,房子要想稳固,地基必须先打好.C语言程序运行过程分为三个阶段,分别是,编写.编译和链接.C语言编写的程序称为源程序,又称为编译单位. 所以,编译环境设置好,才能正式开始学习C语言.而编译环境就得从基础说起. 第一:基础 1.变量 (1)变量的类型和表示方式: 由于数值类型有多类,浮点数.小数.字符等,那么对应变量的就要有整型.浮点型和字符型.当然变量还有其他的分类,而这三种却是最常用的.整型可以具体分为无符号.长整和短整.浮点型也可分为单精度.双精度和长双精度.有了这些

03 java语言基础逻辑运算符

03.01_Java语言基础(逻辑运算符的基本用法)(掌握) A:逻辑运算符有哪些 &,|,^,! &&,|| B:案例演示 逻辑运算符的基本用法 注意事项: a:逻辑运算符一般用于连接boolean类型的表达式或者值. b:表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子. 算术表达式:a + b 比较表达式:a == b(条件表达式) C:结论: &逻辑与:有false则false. |逻辑或:有true则true. ^逻辑异或:相同为false,不同

嵌入式linux C++语言(二)——C++对C语言基础语法的扩展

嵌入式linux C++语言(二)--C++对C语言基础语法的扩展 C++是基于C语言扩展发展而来的面向对象的程序设计语言,本文将主要讨论C++语言基于C语言扩展的方面. 一.类型增强 1.类型检查更严格 在C语言中: const int a = 100; int *p = &a; 在C++语言中: const int a = 100;//必须在定义的时候初始化 const int *p = &a; 在C++语言中不能隐式转换数据类型. error: invalid conversion

语言基础:C#输入输出与数据类型及其转换

今天学习了C#的定义及特点,Visual Studio.Net的集成开发环境和C#语言基础. C#语言基础资料——输入输出与数据类型及其转换 函数的四要素:名称,输入,输出,加工 输出 Console.Write("这是我的第一个程序");//不换行,(不要漏掉:)(所有的符号全都用英文)(方法,也就是函数后面必须跟括号) Console.WriteLine("第二句");//输出这句后会换行 “这是我的第一个程序”后不换行,紧跟“第二句”,“第二句”换行,光标进入

Python源码剖析笔记0 ——C语言基础

python源码剖析笔记0--C语言基础回顾 要分析python源码,C语言的基础不能少,特别是指针和结构体等知识.这篇文章先回顾C语言基础,方便后续代码的阅读. 1 关于ELF文件 linux中的C编译得到的目标文件和可执行文件都是ELF格式的,可执行文件中以segment来划分,目标文件中,我们是以section划分.一个segment包含一个或多个section,通过readelf命令可以看到完整的section和segment信息.看一个栗子: char pear[40]; static

VBA 语言基础

VBA 语言基础 第一节 标识符 一.定义 标识符是一种标识变量.常量.过程.函数.类等语言构成单位的符号,利用它可以完成对变量.常量.过程.函数.类等的引用. 二.命名规则 1) 字母打头,由字母.数字和下划线组成,如 A987b_23Abc 2) 字符长度小于40,(Excel2002 以上中文版等,可以用汉字且长度可达254 个字符) 3) 不能与VB 保留字重名,如public, private, dim, goto, next, with, integer, single等 第二节 运