今天学习《从新手到高手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语言 函数调用 参数传递机制 探讨 txt
JavaScript 函数调用 JavaScript 函数有 4 种调用方式。 每种方式的不同方式在于 this 的初始化。 this 关键字 一般而言,在Javascript中,this指向函数执行时的当前对象。 Note 注意 this 是保留关键字,你不能...
c# 调用C++编写 的DLL函数各种参数传递问题。数据处理问题等等。
函数调用参数传递类型(java)的用法介绍..ppt
remote-function是一个跨进程通讯库,它可以像调用本进程函数一样调用另外一个进程的函数。 remote-function支持调用普通函数,也支持调用类的成员函数。 remote-function底层使用命令管道进行通讯,内置的流程完成...
函数递归调用堆栈分析是指在计算机科学中,函数递归调用时,函数调用自身的过程中,如何使用堆栈来存储变量和参数的过程。堆栈是一种 lasts-in-first-out(LIFO)的数据结构,用于存储函数调用的参数和变量。 在...
·用实参数向形式参数传递数据; ·为获得数据参数及在函数体中声明的变量分配存储空间; ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调函数。 当参数表为空时,表示该函数不从调用...
C语言函数调用与参数传递剖析.pdf
引用改网友的 https://download.csdn.net/download/jackeywjf/1521390 看懂后对其改进和中文注释,C#动态调用DLL并对目标函数传递参数
本文主要探讨C/C++语言函数间参数的传值和传地址机制,同时探讨了计算机在调用一个函数时采用什么样的方法来自适应的处理函数中的参数,即函数调用约定.
6.5 节函数调用:每次调用一个函数时,系统都会将参数和局部变量存储在一个内存区域,称为堆栈,它以后进先出的方式存储元素。 6.6 节带/不带返回值的函数:函数可以带有返回值,也可以不带返回值。如果函数没有 ...
本文将深入分析C语言中函数参数传递的机制,探讨函数调用时数据的传递关系,并通过实例来解释C语言函数参数传递的三种方式。 首先,C语言程序是由基本语句和函数构成的,每个函数可完成相对独立的小任务,按照一定...
在C++中,参数传递的方式是“实虚结合”。 •按值传递(pass by value) •地址传递(pass by pointer) •引用传递(pass by reference) 按值传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一...
主函数负责输入输出和函数调用,perimeter函数负责计算圆的周长,area函数负责计算圆的面积。 标签解析 标签“圆的面积”、“调用函数”、“类”表明了程序的主要特点。程序使用函数调用来计算圆的周长和面积,...
定时器事件的响应函数,即 VOID CALLBACK TimerProc() 不是由用户程序自己调用的,而是根据时钟事件借由操作系统内核调用的;那么,如何利用这些形式参数,传递程序逻辑处理所需要的参数呢?本文给出一个解决方案,...
c#调用C++动态库、执行回调函数,并回传结构体参数数据。vs2017环境编写C#和C++动态库,这个为完整工程例子,可供相关人员学习参考。
必须参数,即函数调用时必须要传的参数,下面进行举例说明。 def helloWorld(a): print("输出:hello") helloWorld("aaa") # 必须要有参数 运行结果:hello 函数参数 默认参数 在定义函数时,Python支持默认值参数,...
在C语言编程中,函数形参是函数定义中声明的变量,用于接收函数调用时传递的参数。在函数形参中,指针类型的参数传递是一种常见的参数传递方式。指针类型的参数传递可以将数据的地址传递给函数,从而在函数中对数据...
必需参数是在函数调用时,须以正确的顺序传入,且调用时的数量必须和声明时的一样参数。 实例:定义一个printme函数,并定义一个必需参数,并输出结果。 def printme( str ): #打印任何传入的字符串 print (str) ...