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, 传入一个正整型参数,返回此数的二进制数中,各位上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;
    }   
   

补充: 在此例中,因为change函数的参数为传址调用,&num1,&num1是指实参变量的地址值传递给形参,只接收地址,外面传入变量就接收变量的地址,如果传入指针就接收指针的值(地址值),给地址空间重命名num1,num2,而后针对它门做操作。