今天学习《从新手到高手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 函数时,需要根据情况选择合适的参数传递方式,包括不返回值的参数、带返回值的参数、传递结构体指针和传递结构体数组等。
函数调用时,信息传递是连接实际参数(caller侧的变量)和形式参数(callee侧的变量)的关键机制。这里有三种主要的信息传递方式:传值调用、传址调用和引用调用,每种方式都有其独特的特性和应用场景。 1. **传值...
本文将深入探讨C语言中的函数调用机制以及参数传递方式,并结合具体的汇编指令来解释这一过程。 #### 函数调用机制 在C语言中,函数调用通常遵循以下步骤: 1. **保存当前上下文**:调用函数前,系统会保存当前...
6. **传递参数**:动态调用时,`DynamicInvoke`方法接收一个对象数组作为参数,数组中的元素顺序应与目标函数的参数顺序一致。如果目标函数有返回值,`DynamicInvoke`会返回该值。 注意,如果DLL函数使用了非托管...
结合汇编讲解了c语言汇中函数参数是如何传递,如何调用的
因此,在使用这种参数传递方式时,需要确保目标环境支持ES6特性。 除了基本的参数传递,我们还可以在函数定义时为参数指定默认值。如果在调用函数时不提供某个参数值,那么该参数将自动使用预设的默认值: ```...
### C/C++语言函数参数传递及函数调用约定的探讨 #### 摘要 本文主要探讨了C/C++语言中函数之间的参数...通过合理选择参数传递方式(值传递或地址传递)和合适的函数调用约定,可以显著提高程序的性能和可维护性。
根据给定的文件信息,我们可以深入探讨C/C++中几种主要的函数调用方式:__cdecl、__stdcall和__fastcall,以及C++特有的thiscall。 ### __cdecl `__cdecl`,即“C声明”或“C default”,是C/C++中默认的调用约定...
函数调用与参数传递是C语言编程中的核心概念之一,理解它们的工作原理对于掌握C语言至关重要。函数调用是指主调函数调用被调函数的过程,通过这种方式,程序可以按模块化进行设计和组织。参数传递是函数调用过程中不...
C++动态库中,回调函数是一种特殊的函数,它的指针可以作为参数传递给其他函数,在适当的时候被调用。在C#中,我们将使用委托来表示这个回调函数。C++的回调函数需要考虑函数指针的调用约定,通常使用`__stdcall`...
栈是一种先进后出(LIFO)的数据结构,在程序运行时主要用于存储函数调用过程中的临时数据。当函数被调用时,会为其分配一块内存空间,用于存放函数的局部变量、参数等信息。当函数执行完毕后,这块内存空间会被释放...
JavaScript 函数调用 JavaScript 函数有 4 种调用方式。 每种方式的不同方式在于 this 的初始化。 this 关键字 一般而言,在Javascript中,this指向函数执行时的当前对象。 Note 注意 this 是保留关键字,你不能...
传地址调用(或称传引用调用)是另一种常用的参数传递方式。它与传地址值调用类似,都是基于实参地址的传递。但在传引用调用中,形参通常是一个引用类型而非指针类型。 示例代码如下: ```cpp #include using ...
在函数调用过程中,参数传递方式的选择取决于函数的具体需求和实现方式。 三、函数参数传递规律 通过对函数参数传递方式的探讨,我们可以总结出函数参数传递规律,即函数参数传递方式取决于函数的具体需求和实现...
- 堆栈是一种特殊的内存区域,用于存储函数调用过程中的参数、局部变量和其他信息。 - 在嵌入式系统中,开发人员可能需要手动定义一个数组作为堆栈。 - 在现代操作系统(如Windows)中,每个线程都会自动拥有一个...
函数参数传递问题是指在函数调用时,参数的传递方式对函数的执行结果的影响。函数参数可以是基本类型、数组、结构体、指针等,在函数调用时,参数的传递方式会影响函数的执行结果。 一级指针和二级指针是函数参数...
在C#编程语言中,参数传递和参数调用是核心概念,它们关乎着函数和方法如何接收和处理数据。理解这些概念对于编写高效且可维护的代码至关重要。本篇文章将深入探讨C#中的参数传递机制及其应用。 首先,我们要了解...
首先,理解C#的基础:在C#中,函数参数在编译时就已经确定,因此在函数调用时直接通过位置或命名传递。然而,要动态获取参数名称和值,我们需要利用反射(Reflection)和表达式树(Expression Trees)这两个强大的...