第2周 项目1 - C/C++语言中函数参数传递的三种方式

问题及代码:
/*
 *Copyright(c) 2015,烟台大学计算机与控制工程学院
 *All rights reserved.
 *文件名称:main.cpp
 *作    者:徐群壮
 *完成日期:2015.9.7
 *版 本 号:v1.0
 *
 *问题描述:将输入的两个数实行交换,并输出。
 *输入描述:待交换的两个整数。
 *程序输出:交换后的结果。
*/
#include <iostream>
using namespace std;
void myswap1(int x,int y); //对交换函数myswap1的提前声明   (传值)
void myswap2(int *p1,int *p2); //对交换函数myswap1的提前声明    (传地址)
void myswap3(int &x,int &y); //对交换函数myswap1的提前声明  (引用作形参)
int main()
{
    int a,b;
    cout<<"请输入待交换的两个整数:"<<endl;
    cin>>a>>b;
    myswap1(a,b);    // 调用传值的交换函数myswap1
    cout<<"调用传值的交换函数后的结果是:"<<endl;
    cout<<a<<' '<<b<<endl;
    cout<<"请输入待交换的两个整数:"<<endl;
    cin>>a>>b;
    myswap2(&a,&b);    // 调用传地址的交换函数myswap2
    cout<<"调用传地址的交换函数后的结果是:"<<endl;
    cout<<a<<' '<<b<<endl;
    cout<<"请输入待交换的两个整数:"<<endl;
    cin>>a>>b;
    myswap3(a,b);    // 调用以引用作形参的交换函数myswap2
    cout<<"调用以引用作形参的交换函数后的结果是:"<<endl;
    cout<<a<<' '<<b<<endl;
    return 0;
}
void myswap1(int x,int y)//交换函数myswap1的具体定义
{
    int t;   
    t=x;
    x=y;
    y=t;
}
void myswap2(int *p1,int *p2) //交换函数myswap2的具体定义
{
    int t;
    t=*p1;
    *p1=*p2;
    *p2=t;
}
void myswap3(int &x,int &y) //交换函数myswap3的具体定义
{
    int t;
    t=x;
    x=y;
    y=t;
}



运行结果:

第2周 项目1 - C/C++语言中函数参数传递的三种方式_第1张图片

知识点总结:

①我们都知道,实参到形参数值传递的过程是单向。形参和实参都会单独开辟内存空间,即在传值交换函数myswap1中交换后只是x和y 的值交换了。但这样的变化并不会影响不在同一个储存单元的a和b。故实现不了a和b的交换。
②先来说运用传地址的交换函数myswap2.在调用myswap2函数时,已经把整数a和b 的地址作为实参传递给形参。在函数具体实现过程中也是对地址所指向的内存单元的内容进行交换,故能实现a和b的交换。
③对于以引用做形参的函数myswap3.我们都知道所谓引用,就是一个内存空间有两个名字。所以,在myswap3函数中对x和y的交换即是对a和b的交换。当然能实现a和b的转换。

学习心得:

熟练掌握地址,指针。以及实参到形参的传递过程的特点。


你可能感兴趣的:(第2周 项目1 - C/C++语言中函数参数传递的三种方式)