函数的传参

    技术2022-05-20  57

    1.传值参数

    #include "stdafx.h" #include <iostream> void Add(int a, int b, int sum) { sum = a + b; } int _tmain(int argc, _TCHAR* argv[]) { int a = 1; int b = 2; int sum = 0; Add(a, b, sum); std::cout << "sum is: " << sum << std::endl; return 0; } 输出结果:sum is: 0

    运行时实际参数的值将在Add函数执行之前 复制 给形式参数,如果实际参数与形式参数的数据类型不一致,必须进行数据类型转换,函数运行结束时,形式参数所属的数据类型的析构函数会释放该形式参数,形式参数的值不会复制到对应的实际参数中,因此不会改变实际参数的值。可以理解函数运行时形式参数只是实际参数的一个拷贝。

    2.引用参数

    #include "stdafx.h" #include <iostream> void Add(int &a, int &b, int &sum) { sum = a + b; } int _tmain(int argc, _TCHAR* argv[]) { int a = 1; int b = 2; int sum = 0; Add(a, b, sum); std::cout << "sum is: " << sum << std::endl; return 0; } 输出结果:sum is: 3

    传值参数在函数执行之前要调用形式参数的构造函数,函数运行结束时要调用析构函数,因此会增加程序运行的开销。而引用参数则不同,在函数调用时并不是复制实际参数的值,而是直接用实际参数来代替形式参数,因此上面这段程序的sum的值应该是3。另外函数返回时也没有调用析构函数,因此程序运行时开销比传至参数模式小。

    3.常量引用参数

    #include "stdafx.h" #include <iostream> void Add(const int &a, const int &b, int &sum) { sum = a + b; } int _tmain(int argc, _TCHAR* argv[]) { int a = 1; int b = 2; int sum = 0; Add(a, b, sum); std::cout << "sum is: " << sum << std::endl; return 0; } 输出结果:sum is: 3

    常量引用模式指出函数不得修改引用参数,在Add函数中,不能对参数a和b进行修改;由于sum的值改变了,所以不能采用常量引用参数。


    最新回复(0)