数据结构与算法基础——第02周-类C语言有关操作补充2

一 概述

  • 传值方式
  • 传值方式——指针变量作参数
  • 传值方式——数组名作参数
  • 传值方式——引用类型作参数

二 传值方式

2.1 概念

  • 把实参的值传送给函数局部工作区响应的副本中
  • 函数使用这个副本执行必要的功能
  • 函数修改的是副本的值,实参的值不变

2.2 代码

主函数

1
2
3
4
5
6
7
8
void main()
{
float a,b;
cin>>a>>b;
swap(a,b);
cout<<a<<endl<<b<<endl;

}

传值函数

1
2
3
4
5
6
7
#include<iostream.h>
void swap(float m,float n){
float temp;
temp=m;
m=n;
n=temp;
}

三 传值方式——指针变量作参数

3.1 说明

形参变化影响实参

3.2 示例一

主函数

1
2
3
4
5
6
7
8
9
void main()
{
float a,b,*p1,*p2;
cin>>a>>b;
p1=&a;
p2=&b;
swap(p1,p2);
cout<<a<<endl<<b<<endl;
}

传值函数

1
2
3
4
5
6
7
8
#include<iostream.h>
void swap(float *m,float *n)
{
float t;
t=*m;
*m=*n;
*n=t;
}

四 传值方式——数组名作参数

4.1 说明

  • 传递的是数组的首地址
  • 对形参数组所做的任何改变都将反映到实参数组中

4.2 示例

主函数

1
2
3
4
5
void main(void){
char a[10]="hello";
sub(a);
cout<<a<<endl;
}

传值函数

1
2
3
4
5
#include<iostream.h>
void sub(char b[])
{
b[]="word";
}

五 传值方式——引用类型作参数

5.1 说明

什么是引用?引用:它用来给一个对象提供一个替代的名字

5.2 示例一

1
2
3
4
5
6
7
8
#include<iostream.h>
void main()
{
int i=5;
int &j=i;
i=7;
cout<<"i="<<i<<"j="<<j;
}

说明:

  • j是一个引用类型,代表i的一个替代名
  • i值改变时,j值也跟着改变
  • 所以,会输出i=7,j=7

5.3 示例二

主函数

1
2
3
4
5
6
7
void main()
{
float a,b;
cin>>a>>b;
swap(a,b);
cout<<a<<endl<<b<<endl;
}

传值函数

1
2
3
4
5
6
7
8
#include<iostream.h>
void swap(float &m,float &n)
{
float temp;
temp=m;
m=n;
n=tem;
}

5.4 引用类型作参数的三点说明

  • 传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化
  • 引用类型作参数,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参与实参占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好。
  • 指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用“指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。