用函数调用所给出的实参(实际参数,actual arguments)向函数定义给出的形参(形式参数,formal arguments)设置初始值的过程,叫做参数传递(Argument Passing)。
在C++中调用函数时有三种参数传递方式:
(1)传值调用;
(2)传址调用(传指针);
(3)引用传递;
总体上参数传递可分为两类,由形参的类别决定:值调用(call by value)和引用调用(call by reference)。

这里传址调用被归为值调用,因为指针传递也是值传递,只不过值传递的是地址。

一、值传递

int main( )
{
void swap(int,int); //函数声明
int i=,j=;
swap(i,j); //调用函数swap
return ;
}
void swap(int a,int b) //企图通过形参a和b的值互换,实现实参i和j的值互换
{
int temp;
temp=a; //以下3行用来实现a和b的值互换
a=b;
b=temp;
}

在main()函数中调用swap(int a,int b)其中i和j值实际上并没有交换,如果想要交换只能使用指针传递或引用传递。
void swap(int* pa,int* pb)
void swap(int& ra,int& rb)

用指针类型作为形参的值调用方式,可以通过参数返回修改后的值。

void main( )
{
void swap(int *,int *);
int i=,j=;
swap(&i,&j); //实参是变量的地址
}
void swap(int *p1,int *p2) //形参是指针变量
{
int temp;
temp=*p1; //以下3行用来实现i和j的值互换
*p1=*p2;
*p2=temp;
}

二、引用传递

按引用传递,引用实参的引用参数传递给函数,而不是进行参数拷贝。引用类型的形参与相应的实参占用相同的内存空间,改变引用类型形参的值,相应实参的值也会随着变化。

int main( )
{
void swap(int &,int &);
int i=,j=;
swap(i,j);
return ;
}
void swap(int &a,int &b) //形参是引用类型
{
int temp;
temp=a;
a=b;
b=temp;
}

C++ 函数 参数传递方式的更多相关文章

  1. Python 关于Python函数参数传递方式的一点探索

    关于Python函数参数传递方式的一点探索 by:授客 QQ:1033553122 实践代码 #!/usr/bin/env python # -*- coding:utf-8 -*- __author ...

  2. Java 函数参数传递方式详解 分类: Java Game 2014-08-15 06:34 82人阅读 评论(0) 收藏

    转:http://zzproc.iteye.com/blog/1328591 在阅读本文之前,根据自己的经验和理解,大家可以先思考并选择一下Java函数的参数传递方式:  A. 是按值传递的?  B. ...

  3. Java函数参数传递方式详解

    在阅读本文之前,根据自己的经验和理解,大家可以先思考并选择一下Java函数的参数传递方式: A. 是按值传递的? B. 按引用传递的? C. 部分按值部分按引用? 此处暂不宣布正确答案,我们通过一个简 ...

  4. python的函数参数传递方式

    python的一切数据类型都是对象.但是python的对象分为不可变对象和可变对象.python的变量是引用,对python变量的赋值是引用去绑定该对象. 可变对象的数据发生改变,例如列表和字典,引用 ...

  5. C语言函数参数的传递详解

    一.三道考题 开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行--唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, int y){   int tmp;    ...

  6. python中的函数参数的传递

    转载自: http://winterttr.me/2015/10/24/python-passing-arguments-as-value-or-reference/ 我想,这个标题或许是很多初学者的 ...

  7. Delphi_07_Delphi_Object_Pascal_基本语法_05_函数参数

    这里主要讨论Delphi中函数.方法的相关内容. 一.工程文件 { Delphi语法方法和函数 1.方法 2.函数 } program Routine; {$APPTYPE CONSOLE} uses ...

  8. 深入理解javascript函数参数与闭包(一)

    在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...

  9. 【整理】--C++三种参数传递方式

    在C++中,共有三种参数传递方式: 按值传递(pass by value) 地址传递(pass by pointer) 引用传递(pass by reference) (1)按值传递的过程为:首先计算 ...

随机推荐

  1. 自定义单选框radio样式

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. querystring模块详解

    querystring模块用于处理query字符串,包含以下方法: parse.decode escape unescape encode.stringify parse.decode方法 parse ...

  3. python pyspark入门篇

    一.环境介绍: 1.安装jdk 7以上 2.python 2.7.11 3.IDE pycharm 4.package: spark-1.6.0-bin-hadoop2.6.tar.gz 二.Setu ...

  4. NYOJ2—括号配对问题

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0<N<=1 ...

  5. docker 私有仓库 harbor docker-compose

    c创建docker私有仓库 docker pull registry:2.1.1 mkdir /opt/registry#mkdir /var/lib/registry docker run -d - ...

  6. C#做一个简单的进行串口通信的上位机

    C#做一个简单的进行串口通信的上位机   1.上位机与下位机 上位机相当于一个软件系统,可以用于接收数据.控制数据.即可以对接收到的数据直接发送操控命令来操作数据.上位机可以接收下位机的信号.下位机是 ...

  7. 第一次作业:基于Linux 4.5的进程模型与调度器分析

    1.操作系统是怎么组织进程的? 1.1什么是线程,什么是进程: 刚接触时可能经常会将这两个东西搞混.简单一点的说,进程是一个大工程,线程则是这个大工程中每个小地方需要做的东西(在linux下看作&qu ...

  8. 使用uliweb创建一个简单的blog

    1.创建数据库 uliweb的数据库都在models.py文件里面,因此先创建该文件 vim apps/blog/models.py 添加如下两行: #coding=utf-8 from uliweb ...

  9. 【HNOI2015】开店

    题面 题解 树链剖分 + 主席树 先考虑一个简单一点的问题: [LNOI2014]LCA 我们考察\(dep[\mathrm{LCA}(i, x)]\)的性质,发现它是\(i\)和\(x\)的链交的长 ...

  10. CodeForces 985D Sand Fortress

    Description You are going to the beach with the idea to build the greatest sand castle ever in your ...