美文网首页
C++引用和函数的高级用法

C++引用和函数的高级用法

作者: 帅碧 | 来源:发表于2016-11-07 21:05 被阅读0次

函数

  1. 内联函数
  2. 重载函数
  3. 默认
  4. 递归函数

引用的概念

  • 引用的定义和初始化
  1. 引用是个别名
  2. 引用的初始化
  3. 引用作为目标的别名而使用,对引用的改动实际就是对目标的改动。
  4. 为了建立引用,先写上目标的类型,再加上引用运算符”&”,然后是引用的名字。
  5. 引用能引用任何合法变量名

引用的初始化

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int intone=5;
    int& rint=intone;
    cout<<"intone = "<<intone<<endl;
    cout<<"rint = "<<rint<<endl;
}
//结果为:intone=5;
//rint=5;

  1. 它们占用同一块内存
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int intone=5;
    int& rint=intone;
    cout<<"intone = "<<intone<<endl;
    cout<<"rint = "<<rint<<endl;
    rint=10;
    cout<<"intone = "<<intone<<endl;
    cout<<"rint = "<<rint<<endl;
    cout<<"&intone = "<<&intone<<endl;
    cout<<"&rint = "<<&rint<<endl;
}
//结果为: 5,5,10,10

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int intone=5;
    int& rint=intone;
    int inttwo=6;
    rint=inttwo;
    cout<<"intone = "<<intone<<endl;
    cout<<"rint = "<<rint<<endl;
    cout<<"inttwo = "<<intone<<endl;
    cout<<"&intone = "<<&intone<<endl;
    cout<<"&rint = "<<&rint<<endl;
    cout<<"&inttwo = "<<&inttwo<<endl;
}
//结果为:6,6,6,f0,f0,f4;

操作引用

  • &只有在声明引用时是引用操作符,其他时候都是地址操作符

引用的条件

  • 若一个变量声明为T&,即引用时,它必须用T类型的变量或对象,或能够转换成T类型的对象进行初始化。
 const double& rr=1; 
 
  1. 首先作必要的类型转换;
  2. 然后将结果置于临时变量;
  3. 最后,把临时变量的地址作为初始化的值
  • 由于指针也是变量,所以可以有指针变量的引用
 int*a:
  int*&P=a://表示int*的引用P初始化为a
  int b=8;
  P=&b://0k,P是a的别名,是一个指针

  • 什么不能引用
  1. 对void进行引用是不允许的。

例如:void&a=3; //error

  1. 不能建立引用的数组
    例如:int a[10];
    int& ra[10]=a; //error
 int a;
 int& ra=a;
 int& *p=&ra; //error企图定义一个引用的指针
 
int& ri=NULL; //毫无意义
nt& ra=int; //error初始化时用数据类型初始化了

用引用传递函数参数(传值,传地址)

  1. 引用作为形参
(传地址)
#include<stdio.h>
#include<iostream>
using namespace std;
void jxbswap(int &a,int &b)//int *a,int *b;两个*号同除以&则变为&
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}
int main()
{
    int x=10,y=20;
    jxbswap(x,y);//原为&x,&y;同除以&,则为x,y;
    cout<<"x = "<<x<<endl;
    cout<<"y = "<<y<<endl;
}

  1. 引用作为返回值
  • 是有问题的

#include<stdio.h>
#include<iostream>
using namespace std;
int *swap()
{
    int temp=12;
    return &temp;//temp空间释放
}
int main()
{
    int *x=swap();//*x成为野指针
    cout<<"*x = "<<*x<<endl;
}

  • 利用引用,则不会有错
include<stdio.h>
#include<iostream>
using namespace std;
int &swap()
{
    int temp=12;
    return temp;//temp空间释放
}
int main()
{
    int &x=swap();//*x成为野指针
    cout<<"x = "<<x<<endl;
}
//结果为:12;

  • 使用引用作为参数和返回值给函数的意义
  1. 函数只能返回一个值。如果程序需要从函数返回两个值怎么办
  2. 解决这一问题的办法之一是用引用给函数传递两个参数,然后由函数往目标中填入正确的值
  3. 函数返回值时,要生成一个值的副本。而用引用返回值时,不生成值的副本,所以提高了效率

相关文章

  • C++引用和函数的高级用法

    函数 内联函数重载函数默认递归函数 引用的概念 引用的定义和初始化引用是个别名引用的初始化引用作为目标的别名而使用...

  • C++基础(引用和函数的高级算法)

    C++基础 引用和函数的高级算法 课程目标 引用的优点和使用方法 引用函数,内联函数,默认参数函数,递归函数。 引...

  • C++ 引用和函数高级运用

    引用简介 引用的作用就是给变量起别名 语法:数据类型 &别名 = 原名 b是a的别名不过引用前必须初始化,若创建b...

  • C与C++回顾

    c++:更好的c,c的超集 c++基本知识cin,cout命令空间引用:别名 T&x=p 高级函数的特性 内联函数...

  • C++ 引用传递的学习

    C++ 引用与引用作为函数的参数C++函数的三种传递方式为:值传递、指针传递和引用传递 C++ 上课习题 刘月林2...

  • C++中的指针和引用与Java中的引用区别

    C++的指针和Java中的引用比较像,在作为函数参数传递时,都可以在函数内部改变 ”外部“ 的值 C++的引用使用...

  • Kotlin函数

    1.函数引用 kotlin中函数引用跟c++中的方法指针很相似,函数引用可以像其他类型的引用一样作为方法的参数和返...

  • C++ 拷贝控制(二) — 移动构造函数和移动赋值运算符

    相关文章: C++ 拷贝控制(一) — 析构函数、拷贝构造函数与拷贝赋值函数 C++ 引用类型 — 左值引用、常引...

  • 面试常见问题01 - C++相关(施工ing)

    目录 一. C、C++的区别和优缺点二. C++的语言特性三. 多种关键字的作用和用法四. 内联函数五. 虚函数六...

  • C++ - 类

    用法1:对象名.成员名 用法2:指针->成员名 用法3:引用名.成员名 成员函数体和类的定义分开写 类的成员函数的...

网友评论

      本文标题:C++引用和函数的高级用法

      本文链接:https://www.haomeiwen.com/subject/mfoouttx.html