本页目录
6.3 值传递和引用传递
发布时间:
一、值传递
说明: 函数调用时实参将数值传入给形参 ,如果形参发生变化,井不会影响实参. 示例:
js
void change (int num1, ant num2){
num1+=100;
num2+=100;
cout << "后:num1 = " << num1 << endi;
cout << "后:num2= " << num2 << endl;
}
int main(){
int a=1,b=2;
change(a,b);
cout<<a<<' '<<b<<endl;//未改变a,b值;
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
练习 根据要求实现函数功能
1, 传入一个正整型参数,返回此数的二进制数中,各位上1的个数。
2,传入任意两个整数,求两个数之间所有自然数之和,包括两数本身。
3,给定一个正整数,输出小于此数的所有质数。
二、引用传递(传址调用 )
说明: 这种调用方式是将实参变量的地址值传递给形参,这时形参实是指针,即让形参的指针指向实参地址,这里不再是将实参拷贝一个副本给形参,而是让形参直接指向实参,这就提供了一种可以改变实参变量的值的方法。现在用传址调用来实现change
js
#include<iostream>
using namespace std;
void change(int &num1,int &num2){ //定义函数,形参是传址调用
num1+=100;
num2+=100;
cout << "后:num1 = " << num1 << endl;
cout << "后:num2= " << num2 << endl;
}
int main(){
int a=1,b=2;
int *pa=&a;
int *pb=&b;
switch(2){
case 1:
change(*pa,*pb);
cout<<a<<' '<<b<<endl;//改变a,b值;
break;
case 2:
change(a,b);
cout<<a<<' '<<b<<endl;//改变a,b值;
break;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
补充: 在此例中,因为change函数的参数为传址调用,&num1,&num1是指实参变量的地址值传递给形参,只接收地址,外面传入变量就接收变量的地址,如果传入指针就接收指针的值(地址值),给地址空间重命名num1,num2,而后针对它门做操作。