`
hello_wangfeng
  • 浏览: 32543 次
社区版块
存档分类
最新评论

函数调用时的三种参数传递方式

阅读更多
今天学习《从新手到高手C++全部精华教程》,http://www.iteye.com/topic/1126275
知道了函数调用的三种参数传递方式:

第一种:传值

#include<iostream>
using namespace std;
void swap(int a, int b){  
    int c;
    cout<<"swap交换前"<<"a:"<<a<<endl;  
    cout<<"swap交换前"<<"b:"<<b<<endl;  
    c = a;
    a = b;
    b = c;
    cout<<"swap交换后"<<"a:"<<a<<endl;  
    cout<<"swap交换后"<<"b:"<<b<<endl;  
}
int main(){
    int x = 3;
    int y = 4;
    cout<<"主程序交换前"<<"x:"<<x<<endl;  
    cout<<"主程序交换前"<<"y:"<<y<<endl;  
    swap(x, y);  
    cout<<"主程序交换后"<<"x:"<<x<<endl;  
    cout<<"主程序交换后"<<"y:"<<y<<endl;  
    return 0;
}

程序结果:



按值传递的意思是,将x,y(实参)的值传递给a,b(形参)。在传递开始前,编译器已经对x,y进行了拷贝,形成了x,y的副本,在传值时,将x,y的副本传递给swap函数,x,y的副本在swap函数中进行了交换,但是这只是局部变量,在swap函数调用结束后,x,y的副本并没有改变main函数中的值。

第二种:传地址

#include<iostream>
using namespace std;
void swap(int *a, int *b){  //*a,*b是说形参是指针变量,用于接收实参的地址
    int c;
    cout<<"swap交换前"<<"*a:"<<*a<<endl;  //4
    cout<<"swap交换前"<<"*b:"<<*b<<endl;  //3
    c = *a;
    *a = *b;
    *b = c;
    cout<<"swap交换后"<<"*a:"<<*a<<endl;  //4
    cout<<"swap交换后"<<"*b:"<<*b<<endl;  //3
}
int main(){
    int x = 3;
    int y = 4;
    cout<<"主程序交换前"<<"x:"<<x<<endl;  //3
    cout<<"主程序交换前"<<"y:"<<y<<endl;  //4
    swap(&x, &y);  //按指针传递,即实参是变量的地址,用于给swap函数的指针变量进行操作
    cout<<"主程序交换后"<<"x:"<<x<<endl;  //4
    cout<<"主程序交换后"<<"y:"<<y<<endl;  //3
    return 0;
}

结果:




第三种:传引用

#include<iostream>
using namespace std;
void swap(int &a, int &b){  //&a,&b是说形参是引用变量,用于接收实参
    int c;
    cout<<"swap交换前"<<"a:"<<a<<endl;  //4
    cout<<"swap交换前"<<"b:"<<b<<endl;  //3
    c = a;
    a = b;
    b = c;
    cout<<"swap交换后"<<"a:"<<a<<endl;  //4
    cout<<"swap交换后"<<"b:"<<b<<endl;  //3
}
int main(){
    int x = 3;
    int y = 4;
    cout<<"主程序交换前"<<"x:"<<x<<endl;  //3
    cout<<"主程序交换前"<<"y:"<<y<<endl;  //4
    swap(x, y);  //按引用传递
    cout<<"主程序交换后"<<"x:"<<x<<endl;  //4
    cout<<"主程序交换后"<<"y:"<<y<<endl;  //3
    return 0;
}



程序结果:


与按值传递相比,按引用传递的唯一区别就是在swap函数的形参由(int a, int b)变成了(int &a, int &b)
这里的&是引用运算符,而不是取地址运算符。
与按值传递有本质区别。
  • 大小: 17.1 KB
  • 大小: 18.1 KB
  • 大小: 16.6 KB
分享到:
评论

相关推荐

    c# 调用C++编写 的DLL函数各种参数传递问题。

    C# 调用 C++ 编写的 DLL 函数各种参数传递问题 ...在 C# 调用 C++ 编写的 DLL 函数时,需要根据情况选择合适的参数传递方式,包括不返回值的参数、带返回值的参数、传递结构体指针和传递结构体数组等。

    函数调用的信息传递

    函数调用时,信息传递是连接实际参数(caller侧的变量)和形式参数(callee侧的变量)的关键机制。这里有三种主要的信息传递方式:传值调用、传址调用和引用调用,每种方式都有其独特的特性和应用场景。 1. **传值...

    关于C语言中函数调用和参数传递机制的探讨.txt

    本文将深入探讨C语言中的函数调用机制以及参数传递方式,并结合具体的汇编指令来解释这一过程。 #### 函数调用机制 在C语言中,函数调用通常遵循以下步骤: 1. **保存当前上下文**:调用函数前,系统会保存当前...

    C#动态调用DLL并对目标函数传递参数

    6. **传递参数**:动态调用时,`DynamicInvoke`方法接收一个对象数组作为参数,数组中的元素顺序应与目标函数的参数顺序一致。如果目标函数有返回值,`DynamicInvoke`会返回该值。 注意,如果DLL函数使用了非托管...

    C语言中函数调用和参数传递机制的探讨

    结合汇编讲解了c语言汇中函数参数是如何传递,如何调用的

    JavaScript函数参数使用带参数名的方式赋值传入的方法

    因此,在使用这种参数传递方式时,需要确保目标环境支持ES6特性。 除了基本的参数传递,我们还可以在函数定义时为参数指定默认值。如果在调用函数时不提供某个参数值,那么该参数将自动使用预设的默认值: ```...

    C C++语言函数参数传递及函数调用约定的探讨

    ### C/C++语言函数参数传递及函数调用约定的探讨 #### 摘要 本文主要探讨了C/C++语言中函数之间的参数...通过合理选择参数传递方式(值传递或地址传递)和合适的函数调用约定,可以显著提高程序的性能和可维护性。

    c/c++中函数调用方式

    根据给定的文件信息,我们可以深入探讨C/C++中几种主要的函数调用方式:__cdecl、__stdcall和__fastcall,以及C++特有的thiscall。 ### __cdecl `__cdecl`,即“C声明”或“C default”,是C/C++中默认的调用约定...

    C#调用C++动态库,执行回调函数并传递结构体参数

    C++动态库中,回调函数是一种特殊的函数,它的指针可以作为参数传递给其他函数,在适当的时候被调用。在C#中,我们将使用委托来表示这个回调函数。C++的回调函数需要考虑函数指针的调用约定,通常使用`__stdcall`...

    C语言函数调用与参数传递剖析.pdf

    函数调用与参数传递是C语言编程中的核心概念之一,理解它们的工作原理对于掌握C语言至关重要。函数调用是指主调函数调用被调函数的过程,通过这种方式,程序可以按模块化进行设计和组织。参数传递是函数调用过程中不...

    函数调用时栈与寄存器的变化

    栈是一种先进后出(LIFO)的数据结构,在程序运行时主要用于存储函数调用过程中的临时数据。当函数被调用时,会为其分配一块内存空间,用于存放函数的局部变量、参数等信息。当函数执行完毕后,这块内存空间会被释放...

    JavaScript函数的调用以及参数传递

    JavaScript 函数调用 JavaScript 函数有 4 种调用方式。 每种方式的不同方式在于 this 的初始化。 this 关键字 一般而言,在Javascript中,this指向函数执行时的当前对象。 Note 注意 this 是保留关键字,你不能...

    关于C++的函数参数传递方式

    传地址调用(或称传引用调用)是另一种常用的参数传递方式。它与传地址值调用类似,都是基于实参地址的传递。但在传引用调用中,形参通常是一个引用类型而非指针类型。 示例代码如下: ```cpp #include using ...

    基于C语言函数参数传递规律的探讨.pdf

    在函数调用过程中,参数传递方式的选择取决于函数的具体需求和实现方式。 三、函数参数传递规律 通过对函数参数传递方式的探讨,我们可以总结出函数参数传递规律,即函数参数传递方式取决于函数的具体需求和实现...

    产生chkesp的函数调用方式

    - 堆栈是一种特殊的内存区域,用于存储函数调用过程中的参数、局部变量和其他信息。 - 在嵌入式系统中,开发人员可能需要手动定义一个数组作为堆栈。 - 在现代操作系统(如Windows)中,每个线程都会自动拥有一个...

    函数参数的传递问题(一级指针和二级指针)

    函数参数传递问题是指在函数调用时,参数的传递方式对函数的执行结果的影响。函数参数可以是基本类型、数组、结构体、指针等,在函数调用时,参数的传递方式会影响函数的执行结果。 一级指针和二级指针是函数参数...

    c# 参数传递,参数调用

    在C#编程语言中,参数传递和参数调用是核心概念,它们关乎着函数和方法如何接收和处理数据。理解这些概念对于编写高效且可维护的代码至关重要。本篇文章将深入探讨C#中的参数传递机制及其应用。 首先,我们要了解...

    C# 调用函数时动态获取参数名称和值

    首先,理解C#的基础:在C#中,函数参数在编译时就已经确定,因此在函数调用时直接通过位置或命名传递。然而,要动态获取参数名称和值,我们需要利用反射(Reflection)和表达式树(Expression Trees)这两个强大的...

Global site tag (gtag.js) - Google Analytics