首页 > 编程语言 >C++中&的功能 及 用法

C++中&的功能 及 用法

时间:2023-04-11 22:34:22浏览次数:52  
标签:功能 函数 int max C++ 用法 引用 变量

参考资料:

C++中&的功能 及 用法 - konglingbin - 博客园 (cnblogs.com)

对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&符号,是提高代码执行效率和增强代码质量的一个很好的办法。在 c++学习提高篇(3)---隐式指针的文章中我详细介绍了在隐式指针&的用法,其实这两个概念是统一的。 

引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。

“&”作为逻辑运算符以及作为位运算符的功能。

常被用作下面的功能:

1、取址

int *p = &a;

这行代码的意思是将变量a的地址赋值给指针变量p

在这个语句执行后,p指向了a的地址,也就是说p里面存储的是变量a的地址。我们可以通过p指针来访问a的值:“*p”

2,引用

int &b = a;

此时b就是a的引用,或者称之为别名。如果修改b的值,那么a的值也会相应地发生改变。如b=1,那么a也就会跟着等于1。这种方式在函数传参的时候很常见,如果想函数执行完改变原参数的值,就应该在传参的时候,传入原来的实参的引用。

3,常引用

  1.   const int &b = a;
  2.   b = 1;//错误
  3.   a = 1;//正确

这种做法还有一些其它的应用,以后阐述。

4,作为函数的返回

以引用返回函数值,定义函数时需要在函数名前加&,用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。

int max(int a, int b) { return (a > b) ? a : b; }

在上述代码中,函数max返回了一个int类型的值,如果我们想要在另一个函数中使用max函数的返回值,可以将它存储在一个变量中,例如:

int a = 10, b = 20;
int max_value = max(a, b);

在上述代码中,max_value存储了max函数的返回值。但是,这样做会产生一个被返回值的副本,因为max函数返回的是一个新的int类型的值,需要将这个值复制到max_value中。如果我们使用引用返回函数值,可以避免产生副本,例如:

int& max(int& a, int& b) { return (a > b) ? a : b; }

在上述代码中,函数max返回了一个int类型的引用,这个引用指向ab中较大的那个数。如果我们想要在另一个函数中使用max函数的返回值,可以将它存储在一个引用变量中,例如:

int a = 10, b = 20;
int& max_value = max(a, b);

在上述代码中,max_value是一个引用变量,它指向ab中较大的那个数。这样做不会产生被返回值的副本,因为返回的是原始数据的引用,而不是复制一份数据到另外一个地方。

 一、引用简介

引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 &引用名=目标变量名;

【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

  说明:

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

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

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

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

 

标签:功能,函数,int,max,C++,用法,引用,变量
From: https://www.cnblogs.com/xzit201802/p/17308104.html

相关文章

  • C++/ 4/11 学习内容
    空指针调用结构体中的成员函数const修饰成员函数,不能更改函数成员的值友元,让朋友可以访问本类的私有变量, *全局函数做友元*类做友元*成员函数做友元运算符重载:注意格式就ok还有<<这个输出时候的重载, 各种个样的函数重载,主要是为了方便,在主函数里面的实现......
  • Code-C++-Linux-统计一个文件夹占据空间大小
    Code-C++-Linux-统计一个文件夹占据空间大小https://my.oschina.net/Tsybius2014/blog/330628从以上链接中拷贝的代码#include<stdio.h>#include<sys/stat.h>#include<sys/types.h>#include<unistd.h>#include<stdlib.h>#include<dirent.h>#incl......
  • C++ 按照字典序实现combination
    C++按照字典序实现combination引言C++STL提供了permutation相关的函数(std::next_permutation和std::prev_permutation),但是没有提供combination相关的函数,本文将基于字典序的方法实现一个combination相关的函数。算法回顾1.permutation用法C++的permutation是基于字典序实......
  • C++复习第五天(封装)
    封装练习,设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示姓名和学号。#include<iostream>#include<string>usingnamespacestd;classStudent{public://类中的属性和行为,我们统一称为成员stringm_name;intm_Id;voidshowStudent......
  • C++-unique_lock与lock_guard区别
    C++-unique_lock与lock_guard区别https://blog.csdn.net/ccw_922/article/details/124662275https://blog.csdn.net/sinat_35945236/article/details/124505414都可以对std::mutex进行封装,实现RAII的效果。绝大多数情况下这两种锁是可以互相替代的,区别是unique_lock比lock_gu......
  • 园子的现代化建设-博客版本控制:发布博客设置历史版本功能
    虽然园子当前面临着商业化的巨大困难与挑战,但园子的现代化建设也在尽自己所能地向前推进。今天晚上我们发布了博客后台的一个小功能——博客设置历史版本,当您在博客后台设置页面修改了某个设置(比如公告)并保存时,会生成一个历史版本,您可以查看并还原这个历史版本。使用方法:在博客......
  • C++ Traits的笔记
    traits意思为特性,特点在C++中用于提取类型信息#include<type_traits>type_traits库中有std::is_same可以判断两个类型是否相同先看一下使用模板提取类型信息,就是多做一层封装在使用模板的过程中假设函数中有必要声明一个变量,要和迭代器所指向的对象类型相同template<class......
  • C++第二天
    计算正五边形的周长和面积#include <bits/stdc++.h>using namespace std;int main(){    double n,S,C;    double a,b;    cin>>n;    a=sqrt(5);    b=25+10*a;    S=sqrt(b)/4*n*n;    cout<<S<<endl;    C=5*n;    cout<<C<<endl;......
  • jmeter断言的用法7
    1,jmeter响应断言2,大小断言3,xpath断言4,json断言本文永久更新地址:1,jmeter响应断言名称说明备注响应文本根据规则返回的结果中有对应的文本值响应代码响应返回的code码比如200,404,500等响应头响应头信息里面的内容请求头请求头里面包含的内容......
  • 2023.3月产品小报丨微信管理小程序功能上线;SDK 新增小程序收藏功能
    阳春三月,草长莺飞。在迎接春天到来的日子里,让我们看看FinClip又有哪些新的功能上线吧!产品方面的相关动向 营销模板上线,支持快速生成营销小程序在小程序开放平台,点击左侧的「小程序管理-营销模板」,可查询支持营销模板资源,您可以选择对应的模板,快速生成营销小程序,在不同应用进行分......