C++(引用、窄化、输入)

news2024/9/27 9:29:43

1. 引用 reference重点)

1.1 基础使用

引用就是某个变量常量别名引用进行操作操作变量常量完全相同

#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    int& b = a; // b是a的引用
    b++;
    cout << a << " " << b << endl; // 2 2
    cout << &a << " " << &b << endl; // 0x61fe88 0x61fe88

    return 0;
}

1.2 特性

  • 可以改变引用变量但是不能再次成为其他变量引用
#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    int& b = a; // b是a的引用
    int c = 8;
    b = c; // 仅仅是赋值,b仍然是a的别名
    cout << a << " " << b << " " << c << endl; // 8 8 8
    cout << &a << endl; // 地址1
    cout << &b << endl; // 地址1
    cout << &c << endl; // 地址2
//    &b = c; 错误
//    int& b = c; 错误

    return 0;
}

  • 声明引用必须初始化

  • 声明引用初始化不能NULL

  • 声明引用初始化可以纯数值但是此时引用需要使用const修饰表示引用允许修改引用
#include <iostream>

using namespace std;


int main()
{
//    int& b = 123; 错误
    const int& b = 123; // 常引用
    cout << b << endl; // 123
//    b++; 错误

    return 0;
}

  • 可以变量引用地址赋值一个指针此时指针指向还是原来变量
#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    int &b  = a;
    int* c = &b;
    cout << *c << endl; // 1
    cout << c << " " << &a << endl; // 0x61fe84 0x61fe84

    return 0;
}

  • 可以建立指针变量引用
#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    int* b = &a;
    int*& c = b; // c是b的引用
    cout << c << " " << b << " " << endl; // 0x61fe88 0x61fe88
    cout << *c << endl; // 1

    return 0;
}

  • 可以使用const修饰引用表示引用此时不允许改变引用但是可以改变原变量
#include <iostream>

using namespace std;


int main()
{
    int a = 1;
    const int& b = a; // b是a的常引用
//    b++; 错误
    a++;
    cout << b << endl; // 2

    return 0;
}

1.3 引用参数

思考题】写一个函数,功能为交换两个int变量参数的数值。

#include <iostream>

using namespace std;

/**
 * @brief swap1 错误的交换方式
 */
void swap1(int a,int b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    cout << a << endl; // 2
    cout << b << endl; // 1
}

/**
 * @brief swap2 C的交换方式
 * 指针比较复杂繁琐
 */
void swap2(int* a,int* b)
{
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}

/**
 * @brief swap3 使用引用参数传递,方便简洁
 */
void swap3(int& a,int& b)
{
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}


int main()
{
    int a = 1;
    int b = 2;
    swap1(a,b);
    cout << a << endl; // 1
    cout << b << endl; // 2
    swap2(&a,&b);
    cout << a << endl; // 2
    cout << b << endl; // 1
    swap3(a,b);
    cout << a << endl; // 1
    cout << b << endl; // 2

    return 0;
}

使用引用作为函数参数不产生副本可以使参数传递效率提升相比指针更加简洁

需要注意

引用参数应该内被const修饰情况尽量使用const修饰达到引用参数安全性

#include <iostream>

using namespace std;

void show(const int& a,const int& b)
{
    cout << a << endl;
    cout << b << endl;
}


int main()
{
    int a = 1;
    int b = 2;
    show(a,b);
    cout << a << endl;

    return 0;
}

2. C++窄化了解)

#include <iostream>

using namespace std;

int main()
{
    double a = 123234.8;
    int b = (int)a; // C强制类型转换格式
    int c(a); // C++格式
    cout << b << endl;
    cout << c << endl;
    int d{a}; // C++11格式:可以给出数据窄化警告
    cout << d << endl;

    return 0;
}

3. 输入熟悉)

C++使用cin进行键盘输入cout一样支持连续操作

#include <iostream>

using namespace std;

int main()
{
    int a;
    double b;
    string c; // C++的字符串类型

    cout << "依次输入整型、浮点型与字符串类型:" << endl;
    // 连续输入三个数据,分别给abc三个变量
    cin >> a >> b >> c;
    cout << "您输入的数据是:" << endl;
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;

    return 0;
}

如果输入空格可以使用getline函数可以一次获得一行数据

#include <iostream>

using namespace std;

int main()
{
    string s;
    cout << "请输入一行字符串,可以包含空格:" << endl;
    getline(cin,s);
    cout << "您输入的数据是:" << endl;
    cout << s << endl;

    return 0;
}

今天开始为大家更新C++笔记,加油。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于单片机的汽车防酒驾控制系统设计

本设计基于STC12C5A60S2单片机的汽车防酒驾系统&#xff0c;主要包括主控制器、酒精检测模块、显示模块、声光报警模块和语音播报模块等共同组成&#xff0c;从而实现了对车内酒精浓度进行采集&#xff0c;预防酒驾的发生。利用酒精检测传感器对车辆内人员呼出的气体进行酒精浓…

C盘满了怎么清理_C盘满了深度清理详细操作步骤(多种方法)

最近有很多网友问我&#xff0c;我电脑C盘满了怎么清理&#xff1f;说自己不敢乱清理&#xff0c;怕清了系统文件无法正常开机&#xff0c;今天小编就教大家C盘满了清理的详细操作步骤&#xff0c;按教程来不怕系统进不了系统了。 C盘满了清理流程&#xff1a; 清理系统产生的…

vue-pdf 实现pdf预览、高亮、分页、定位功能

vue-pdf 实现pdf预览、高亮、分页、定位功能&#xff08;基于vue2.0&#xff01;&#xff01;&#xff01;&#xff09; 前言一、实现步骤1.引入库2.示例代码3.触发高亮事件4.分页高亮5.跳转指定页面并高亮&#xff08;不分页&#xff09; 参考笔记&#xff08;重要&#xff09…

C# 面对对象基础 枚举,Enum.TryParse的使用

代码&#xff1a; using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace Student_c_ {enum Week : int{Mon,Tus,Wed,Thu,Fri,Sat,Sun,}public cla…

微服务之服务保护

Sentinel引入Java项目中 一&#xff1a;安装Sentinel 官网地址&#xff1a;https://github.com/alibaba/Sentinel/releases 二&#xff1a;安装好后在sentinel-dashboard.jar所在目录运行终端 三&#xff1a;运行命令&#xff0c;端口自己指定 java -Dserver.port8090 -Dcs…

iPhone16新机到手,,这些操作都要设置好

iPhone16新机首批机子已经发货&#xff0c;陆陆续续都几到了买家们手中了&#xff0c;iPhone 16到手后&#xff0c;虽然没有严格意义上的“必须”设置&#xff0c;但有一些推荐设置可以帮助您更好地使用和保护设备&#xff0c;同时提升安全性和使用体验&#xff0c;让你的新iPh…

栈的深度解析:链式队列的实现

引言 队列是一种广泛应用于计算机科学的数据结构&#xff0c;具有先进先出&#xff08;FIFO&#xff09;的特性。在许多实际应用中&#xff0c;例如任务调度、缓冲区管理等&#xff0c;队列扮演着重要角色。本文将详细介绍队列的基本概念&#xff0c;并通过链表实现一个简单的…

初识Jenkins持续集成系统

随着软件开发复杂度的不断提高&#xff0c;团队成员之间如何更好地协同工作以确保软件开发的质量&#xff0c;已经慢慢成为开发过程中不可回避的问题。Jenkins 自动化部署可以解决集成、测试、部署等重复性的工作&#xff0c;工具集成的效率明显高于人工操作;并且持续集成可以更…

网络原理3-应用层(HTTP/HTTPS)

目录 DNSHTTP/HTTPSHTTP协议报文HTTP的方法请求报头、响应报头(header)状态码构造HTTP请求HTTPS 应用层是我们日常开发中最常用的一层&#xff0c;因为其他层&#xff1a;传输层、网络层、数据链路层、物理层这些都是操作系统和硬件、驱动已经实现好的&#xff0c;我们只能使用…

【Python】的语言基础学习方法 快速掌握! 源码可分享!

python语言基础 第一章 你好python 1.1安装python https://www.python.org/downloads/release/python-3104/ 自定义安装&#xff0c;全选 配置python的安装路径 验证&#xff1a;cmd输入python 1.2python解释器 解释器主要做了两件事&#xff1a; 翻译代码提交给计算机去运…

Linux 下安装mysql

1.检查之前是否安装过mysql rpm -qa | grep mysql 如果之前安装过&#xff0c;删除之前的安装包 rpm -e 安装包 如果没有&#xff0c;进行后续安装 2. 下载 MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 3…

plt常用函数介绍二

目录 fig.add_subplot()ax.set()plt.legend()plt.subplots_adjust()plt.suptitle()plt.grid() fig.add_subplot() fig.add_subplot() 是 Matplotlib 中 Figure 对象的方法&#xff0c;用于在图形中添加子图&#xff08;subplot&#xff09;。 其语法为&#xff1a; subplot(…

同声传译用什么软件最方便?推荐五款易用的同声传译软件

在国际贸易、国际会议及跨国合作项目中&#xff0c;语言障碍往往是沟通效率的一大挑战。 为了解决这个问题&#xff0c;同声传译免费软件应运而生&#xff0c;它们通过先进的技术实现了即时准确的语言转换&#xff0c;极大地促进了不同语言使用者间的交流与协作。 下面&#…

2025考研倒计时 考研时间公布了 你准备好复习冲刺了吗?

2025考研倒计时 考研时间公布了 你准备好复习冲刺了吗&#xff1f;今年的考研时间终于公布了&#xff1a; 正式报名时间2024.10.15-2024.10.28&#xff0c;初试时间12月21日&#xff0c;相信很多学子们已经做好冲刺的准备了。 在这关键的90天的时间内&#xff0c;如何做到时刻…

各种编程语言中有哪些共性?超详细+通俗易懂版!!!

各种编程语言中存在着一些共性&#xff0c;这些共性构成了编程语言的基础框架和设计原则。以下是这些共性的主要方面&#xff1a; 1. 遵循基本的编程原则 模块化&#xff1a;将程序划分为多个独立、可复用的模块&#xff0c;有助于降低程序的复杂度并提高可维护性。封装&#…

【计网】从零开始学习http协议 --- http的请求与应答

如果你不能飞&#xff0c;那就跑&#xff1b; 如果跑不动&#xff0c;那就走&#xff1b; 实在走不了&#xff0c;那就爬。 无论做什么&#xff0c;你都要勇往直前。 --- 马丁路德金 --- 从零开始学习http协议 1 什么是http协议2 认识URL3 http的请求和应答3.1 服务端设计…

Stack Overflow 如何提升其单元测试水平

在 Stack Overflow 成立之初&#xff0c;我们只是一个快速、精简运行的网站。Stackoverflow.com 是由开发人员为开发人员创建的小型初创公司。像所有初创公司一样&#xff0c;我们优先考虑对我们来说最重要的质量属性&#xff0c;而忽视了许多其他属性&#xff0c;包括根据最佳…

功耗或600W,RTX 5090、5080集体降级国内特供版

早在一个多月前&#xff0c;国外知名硬件泄密者 kopite7kimi 就曾透露 NVIDIA RTX 50 系显卡或推迟到明年初 CES 大会上发布。 来源&#xff1a;X 结合前几天爆出的台积电 4NP 工艺产能告急、NVIDIA 为提升下代显卡良率重新流片等。 如果不出意外&#xff0c;这原定在今年第四…

Π-系上的最小 d-系等于 Π-系上的最小集代数

称空间 Ω \Omega Ω 中满足下述条件的集系为 d d d-系: Ω ∈ D \Omega \in \mathscr{D} Ω∈D若 A , B ∈ D A, B \in \mathscr{D} A,B∈D 且 A ∩ B ϕ A \cap B\phi A∩Bϕ, 则 A B ∈ D AB \in \mathscr{D} AB∈D;若 A ⊂ B , A , B ∈ D A \subset B, A, B \in \…

visio 2021入门直通车(一天全搞定)

安装Visio 2021 (64bit)安装教程 1.1. 模板类型 1.2. 界面布局 1.3. 插入对象 1.4. 添加页面 1.5. 全屏演示|页面自适应|visio文件切换 1.6. 快捷键 快捷键说明 Shift 鼠标滚轮 按下shift&#xff0c;点击鼠标滚轮水平页面滚动 鼠标滚轮 垂直页面滚动 Ctrl 鼠标滚轮 按…