zoukankan      html  css  js  c++  java
  • [c++] 参数传递

    • 实参通常是通过值传递给函数的,这意味着形参接收的只是发送给它们的值的副本,它们存储在函数的本地内存中。对形参值进行的任何更改都不会影响原始实参的值。
    • 通常,当信息被传递给一个函数时,采用按值传递的方式,这意味着形参接收的是传递给它的值的副本。如果形参的值在函数内部被改变,那么它对原始实参是没有影响的
    • 有时候可能会希望一个函数能够改变正在调用中的函数(即调用它的函数)中的一个值,这可以通过引用传递的方式来完成
    • 当使用引用变量作为形参时,它将变为实参列表中相应变量的别名,对形参进行的任何更改都将真正更改正在调用它的函数中的变量。当以这种方式将数据传递给形参时,该实参被称为按引用传递
     1 #include <iostream>
     2 using namespace std;
     3 // Function prototype. The parameter is a reference variable.
     4 void doubleNum(int &SrefVar);
     5 int main()
     6 {
     7     int value = 4;
     8     cout << "In main, value is " << value << endl;
     9     cout << "Now calling doubleNum..." << endl;
    10     doubleNum(value);
    11     cout << "Now back in main, value is "<< value << endl;
    12     return 0;
    13 }
    14 void doubleNum (int &SrefVar)
    15 {
    16     SrefVar *= 2;
    17 }

    •  通过返回值改变实参的值
     1 #include <iostream>
     2 using namespace std;
     3 //Function prototypes
     4 void getNum(int &);
     5 int doubleNum(int);
     6 int main()
     7 {
     8     int value;
     9     // Call getNum to get a number and store it in value
    10     getNum(value);
    11     value = doubleNum(value);
    12     // Display the resulting number
    13     cout << "That value doubled is " << value << endl;
    14     return 0;
    15 }
    16 void getNum(int &userNum)
    17 {
    18     cout << "Enter a number: ";
    19     cin >> userNum;
    20 }
    21 int doubleNum (int number)
    22 {
    23     return number *2;
    24 }

    • 引用变量其实就是原始变量的别名,该原始变量用作实参。这样的设计使得函数可以访问原始实参变量,从而允许它更改变量的内容
    • 应该仅在绝对需要时才使用引用变量。任何时候允许一个函数来改变函数之外的变量,其实都是在创建潜在的调试问题
    • 按引用传递实参还有一种替代方法,那就是使用指针作为函数参数
     1 #include <iostream>
     2 using namespace std;
     3 //Function prototypes
     4 void getNumber(int *);
     5 void doubleValue(int *);
     6 int main()
     7 {
     8     int number;
     9     //Call getNumber and pass the address of number
    10     getNumber(&number);
    11     // Call doubleValue and pass the address of number
    12     doubleValue(&number);
    13     // Display the value in number
    14     cout << "That value doubled is " << number << endl;
    15     return 0;
    16 }
    17 void getNumber(int *input)
    18 {
    19     cout << "Enter an integer number: ";
    20     cin >> *input;
    21 }
    22 void doubleValue(int *val)
    23 {
    24     *val *= 2;
    25 }

     注意事项:

    • 值传递时,形参会创建实参的拷贝
    • 当传递的实参为大型对象时,为了降低传值赋值实参的开销,应该将参数定义为传引用或传指针
    • 如果用返回值的话,一个函数只能返回一个值,而有时函数需要同时返回多个值,一种方法是定义一个新的数据类型包含两个成员,另一种简单的方法是用引用实参
  • 相关阅读:
    一个标准的类通常要拥有下面四个组成部分
    局部变量和成员变量的区别
    Java学习: 面向对象的使用与注意事项
    学习:内存的申请与释放
    虚拟内存与物理内存
    实现:win32实现EDIT控件读取和保存
    学习:生产者和消费者模式实现线程同步
    学习:线程互斥
    学习:多线程
    实现:服务程序增删
  • 原文地址:https://www.cnblogs.com/cxc1357/p/11945728.html
Copyright © 2011-2022 走看看