博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++学习笔记-6-函数
阅读量:6804 次
发布时间:2019-06-26

本文共 4560 字,大约阅读时间需要 15 分钟。

hot3.png

C++中的函数用法同C语言的区别不大,出了参数传递可以用引用之外。

参数传递可以是:传值,传指针,传引用。

返回值:各种数据类型,指针,引用。

这里讲一个对指针的引用。

举一个交换两个整形数的例子来说明:

源程序如下:

#include <iostream>
using namespace std;
void iswapint(int a,int b)  //第一个输出结果,变量的值和地址没有任何变化,传递的是变量的一个拷贝。
{
    int t=a;
    a=b;
    b=t;
}
void iswapref(int &a,int &b)//使用引用,直接对变量操作,地址没有变化,变量的数值变化了。
{
    int t=a;
    a=b;
    b=t;
}
void iswapptr1(int *a,int *b)//使用指针传递,里面的方法,*a等,其实这个叫做间接引用指针。
{
    int t=*a;
    *a=*b;
    *b=t;
}
void iswapptr2(int *a,int *b)//指针传递,同第一个一样,传递的是指针的拷贝,对原来的变量和地址都没有改变。
{
    int *t=a;
    a=b;
    b=t;
}
void iswaptrref1(int *&a,int *&b)//变量的值没有改变,但是改变了变量的地址,因此通过地址找变量的数值就不一样了
//这个相当于有两个房子A和B在广州和香港,里面对应的是一个男人(Y)和一个女人(X),把广州和香港对调,地址变了
//但是A房子还是Y男,B房子还是X女,如果通过地址找则香港是Y男了,而广州是X女了。
{
    int *t=a;
    a=b;
    b=t;
}
void iswaptrref2(int *&a,int *&b)//这个结果是因为上面的函数原因造成的,其实这个跟void iswapptr1(int *a,int *b)//使用指针传递,里面的方法,*a等,其实这个叫做间接引用指针。
{
    int t=*a;
    *a=*b;
    *b=t;
}
int main()
{
  
    int x=5,y=9;
    int *ptx=&x;
    int *pty=&y;
    cout<<"Original value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    iswapint(x,y);
    //iswapref(x,y);
    //iswapptr1(ptx,pty);
    //iswapptr2(ptx,pty);
    //iswaptrref1(ptx,pty);
    //iswaptrref2(ptx,pty);
    cout<<endl;
    cout<<"Changed value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    cout<<"Original value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    //iswapint(x,y);
    iswapref(x,y);
    //iswapptr1(ptx,pty);
    //iswapptr2(ptx,pty);
    //iswaptrref1(ptx,pty);
    //iswaptrref2(ptx,pty);
    cout<<endl;
    cout<<"Changed value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    cout<<"Original value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    //iswapint(x,y);
    //iswapref(x,y);
    iswapptr1(ptx,pty);
    //iswapptr2(ptx,pty);
    //iswaptrref1(ptx,pty);
    //iswaptrref2(ptx,pty);
    cout<<endl;
    cout<<"Changed value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    cout<<"Original value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    //iswapint(x,y);
    //iswapref(x,y);
    //iswapptr1(ptx,pty);
    iswapptr2(ptx,pty);
    //iswaptrref1(ptx,pty);
    //iswaptrref2(ptx,pty);
    cout<<endl;
    cout<<"Changed value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    cout<<"Original value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    //iswapint(x,y);
    //iswapref(x,y);
    //iswapptr1(ptx,pty);
    //iswapptr2(ptx,pty);
    iswaptrref1(ptx,pty);
    //iswaptrref2(ptx,pty);
    cout<<endl;
    cout<<"Changed value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    cout<<"Original value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    //iswapint(x,y);
    //iswapref(x,y);
    //iswapptr1(ptx,pty);
    //iswapptr2(ptx,pty);
    //iswaptrref1(ptx,pty);
    iswaptrref2(ptx,pty);
    cout<<endl;
    cout<<"Changed value:  x= "<<x<<"  y= "<<y<<endl;
    cout<<"*ptx= "<<*ptx<<"  *pty= "<<*pty<<endl;
    cout<<"Address:  x="<<ptx<<"  y=  "<<pty<<endl;
    return 0;
}

输出结果:

Function is: swap(int ,int)

Original value:  x= 5  y= 9
*ptx= 5  *pty= 9
Address:  x=0xbfd9b448  y=  0xbfd9b444
Changed value:  x= 5  y= 9
*ptx= 5  *pty= 9
Address:  x=0xbfd9b448  y=  0xbfd9b444
Function is: swap(int &,int &)
Original value:  x= 5  y= 9
*ptx= 5  *pty= 9
Address:  x=0xbfd9b448  y=  0xbfd9b444
Changed value:  x= 9  y= 5
*ptx= 9  *pty= 5
Address:  x=0xbfd9b448  y=  0xbfd9b444
Function is: swap(int *,int *)
Original value:  x= 9  y= 5
*ptx= 9  *pty= 5
Address:  x=0xbfd9b448  y=  0xbfd9b444
Changed value:  x= 5  y= 9
*ptx= 5  *pty= 9
Address:  x=0xbfd9b448  y=  0xbfd9b444
Function is: swap(int *,int *)
Original value:  x= 5  y= 9
*ptx= 5  *pty= 9
Address:  x=0xbfd9b448  y=  0xbfd9b444
Changed value:  x= 5  y= 9
*ptx= 5  *pty= 9
Address:  x=0xbfd9b448  y=  0xbfd9b444
Function is: swap(int *&,int *&)
Original value:  x= 5  y= 9
*ptx= 5  *pty= 9
Address:  x=0xbfd9b448  y=  0xbfd9b444
Changed value:  x= 5  y= 9
*ptx= 9  *pty= 5
Address:  x=0xbfd9b444  y=  0xbfd9b448
Function is: swap(int *&,int *&)
Original value:  x= 5  y= 9
*ptx= 9  *pty= 5
Address:  x=0xbfd9b444  y=  0xbfd9b448
Changed value:  x= 9  y= 5
*ptx= 5  *pty= 9
Address:  x=0xbfd9b444  y=  0xbfd9b448

转载于:https://my.oschina.net/u/185161/blog/32811

你可能感兴趣的文章
模板字符串
查看>>
使用WebDriver遇到的一些问题汇总
查看>>
AI:你们是不是在等一顶红帽子?
查看>>
六周第一次课 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下
查看>>
我的友情链接
查看>>
华为 ACL 问题
查看>>
RHEL设置主机名
查看>>
Java原始的压缩和解压
查看>>
ORACLE系统表和视图说明
查看>>
你在为谁工作
查看>>
5、MySQL多表查询
查看>>
GZIPInputstream解决乱码问题
查看>>
阿里云不能启动docker
查看>>
安装LVS
查看>>
C++入门篇05
查看>>
amoeba搭建及读写分离测试
查看>>
linux系统结构
查看>>
谷歌从Android市场中剔除恶意短信***
查看>>
RH124 第三单元 在图形环境中获取帮助
查看>>
Android第二十三期 - 256k的ListView下拉刷新和滚动加载数据
查看>>