自己不擅长写这样的技术文章,今天没事就写写吧,一是自己的博客不能老是这么的晾着的哇!还是谢谢什么吧!写吧,昨天看到c++的函数参数问题,所以今天我就在这里给大家讲讲c++ 中的函数参数问题吧!希望大家多多的提意见,多多给我指导!先谢谢了!

讲到c++的函数参数问题,首先说说在c++中有哪几种参数传递机制!在c++中有三种传参机制:

(一):值传递(值调用)

(二):指针参数

(三):引用参数

*******************************************************************

我分开一个一个的讲。首先,值传递,作为实际参数的表达式的值被复制到由对应的形式参数名所标识的对象中,做为形参的初始值。在函数体中对形参的访问、修改、都在这个标识对象上操作,与实际参数无关。注意这里,是与实际参数无关。在后面的指针参数和引用参数中大家在看看这方面的差别!看看这个程序:

#include <iostream>
using namespace std;

void change(int,int);

void main()
{
 int i,j;
 cin>>i
    >>j;

cout<<"before change:"<<endl;
  cout<<i<<"  "<<j<<endl;
 cout<<"after change:"<<endl;
 change(i,j);
 cout<<"i = "<<i<<"  "<<"j = "<<j<<endl;
}

void change(int a,int b)
{
 int temp;
 temp = a;
 a = b;
 b = temp;
 cout<<a<<"  "<<b<<endl;
}

对与程序的输出,显而易见的。

在函数体内的操作,都是对形参的操作,对mai函数里的实参没有一点影响。

而且,如果有返回值,在函数执行return语句时,将创建一个匿名对象临时存放函数的返回结果!先值传递说到这里,一会还在后面还有拿出来比较它们的差别!

*******************************************************************

指针参数,说道指针参数,那就是传到函数形参的是实参的内存地址!就是实际参数把对象的地址值赋给形式参数名标识的指针变量中。是指针传递,因为传递的是指针,所以也叫地址调用。我把上面的哪个程序改一下!

#include <iostream>
using namespace std;

void change(int *,int *);

void main()
{
 int i,j;
 cin>>i
    >>j;

cout<<"before change:"<<endl;
  cout<<i<<"  "<<j<<endl;
 cout<<"after change:"<<endl;
 change(&i,&j);
 cout<<"i = "<<i<<"  "<<"j = "<<j<<endl;
}

void change(int *a,int *b)
{
 int temp;
 temp = *a;
 *a = *b;
 *b = temp;
}

把代码Copy下来,在自己的机器上运行一下,刚刚开始写博客了,我不会往里插入图片了,不会插入运行结果的截图了,在这里对不起了,不好意思。

我们可以发现在change函数中没有输出语句,但是在运行后,你看看结果,在看看前面的那个程序代码。你会发现什么。在来看看下面的这个代码:看看你又会发现什么,你会很惊奇的。在开始接触和学习c++的时候,我也是很惊讶的。

#include <iostream>
using namespace std;

void change(int,int);

void main()
{
 int i,j;
 cin>>i
    >>j;

cout<<"before change:"<<endl;
  cout<<i<<"  "<<j<<endl;
 cout<<"after change:"<<endl;
 change(i,j);
 cout<<"i = "<<i<<"  "<<"j = "<<j<<endl;
}

void change(int a,int b)
{
 int temp;
 temp = a;
 a = b;
 b = temp;
}

你在看看这个代码,和上面的代码的区别就是上面的代码是指针传递,下面的这个是值传递。看看运行结果,自己分析一下。

其实,形参指针可以通过获取对象地址访问实参地址所指对象。指针参数的本质也是传值参数。对于一般传值参数,实际参数向形式参数传送的是数据表达式,而指针参数对应的实际参数是地址表达式。如果这个表达式是一个实际对象的地址值,形式参数接收这个地址值后,可以间接访问这个地址所指的对象。

*******************************************************************

再来说一说,引用参数,在编写程序时,引用参数的使用时很平凡的。掌握好引用参数也尤为重要。引用参数和指针参数是一样神奇的。首先给大家晾一段代码吧:

#include <iostream>
using namespace std;

void change(int &,int &);

void main()
{
 int i,j;
 cin>>i
    >>j;

cout<<"before change:"<<endl;
  cout<<i<<"  "<<j<<endl;
 cout<<"after change:"<<endl;
 change(i,j);
 cout<<"i = "<<i<<"  "<<"j = "<<j<<endl;
}

void change(int &a,int &b)
{
 int temp;
 temp = a;
 a = b;
 b = temp;
}

这个是引用的一个例子,大家运行一下,看看结果,是不是被吓着了!其实这样的结果,我们应该是想到的,要是没有想到。那就是你的c++基础差了,赶紧去补基础吧!

大家看到了运行结果,自己想想,这个是为什么呢?

其实,引用参数对应的实际参数应该是对象名。形式参数不需要开辟新的存储空间,这样是不是就比传值参数省内存空间了呢!注意了,重点来了,在执行函数体时,对形参的操作就是对实参对象的操作。直到函数执行结束,撤销引用绑定。

如果到了这里,你在想想上面的那个指针参数的例子。是不是觉得引用参数和指针参数有点像呢?有这样的好奇是对的。要是没有好奇,那就......

其实,引用参数和指针参数都不需要像传值参数那样产生实参对象的副本,并且,引用参数不像指针参数那样通过间址访问实参对象,特别适用于大对象参数的高效操作。

*******************************************************************

写了这么多了,不知道是不是把这个问题说清楚了,这是我第二次写这样的文章了,请大家多多指教了。我不甚感激。希望大家也支持我,写的不好,或者那些地方不对,那肯定是我理解错了,希望大家给我指出来,人无完人,希望大家支持我,我以后一定写出更出色的文章来,和大家分享!谢谢!

转载于:https://www.cnblogs.com/JPAORM/archive/2010/03/24/2509933.html

c++ 函数参数问题相关推荐

  1. Go 学习笔记(65)— Go 中函数参数是传值还是传引用

    Go 语言中,函数参数传递采用是值传递的方式.所谓"值传递",就是将实际参数在内存中的表示逐位拷贝到形式参数中.对于像整型.数组.结构体这类类型,它们的内存表示就是它们自身的数据内 ...

  2. C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)

    每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...

  3. python基础(三元运算+深浅拷贝+函数参数)

    三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 1 书写格式: 2 result = 值1 if 条件 else 值2 3 即如果条件成立,则将值1赋给result ...

  4. C指针6:指针变量作为函数参数

    在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着 ...

  5. 双重指针作为函数参数的妙用

    双重指针作为函数参数,可以在函数函数内部修改外部指针的值.主要用法包括: 1. 在函数内部分配内存,作为函数参数返回: 2. 在函数内部设置指针为空: #include <stdio.h> ...

  6. C++ std::function<void(int)> 和 std::function<void()> 作为函数参数的注意事项

    前言 std::function 作为标准库提供的函数指针,使用起来还是比较方便的,不过在使用过程中有一些需要注意的细节,这里做一个简单的记录. 基本使用 头文件: #include <func ...

  7. C++ 函数参数 值传递与引用传递

    以前我们在C语言中函数参数传递过程中,如果我们想要让当A函数作用域中的变量经过B函数处理之后的数值仍然在A函数中生效,这个时候函数参数的传递时需要引用方式去传递,方式如下: #include < ...

  8. 千万不要把 bool 当成函数参数

    我们有很多 Coding Style 或 代码规范. 但这一条可能会经常被我们所遗忘,就是我们 经常会在函数的参数里使用bool参数,这会大大地降低代码的可读性. 不信?我们先来看看下面的代码. 当你 ...

  9. 深入理解javascript函数系列第二篇——函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...

  10. 3.3.2 函数参数不得不说的几件事

    函数定义时圆括号内是使用逗号分隔开的形式参数列表(parameters),一个函数可以没有参数,但是定义和调用时一对圆括号必须要有,表示这是一个函数并且不接受参数.函数调用时向其传递实参(argume ...

最新文章

  1. SpringBoot + MyBatis + MySQL 读写分离实战
  2. NM-CIDS测试经历
  3. 综合布线系统走线槽架的产品选型
  4. ksql 数量大于2_A股史上唯一能暴涨200%的买卖铁则:内盘大于外盘股价必跌,外盘大于内盘股价必涨,堪称绝技...
  5. http error
  6. msf生成php,使用msfpayload生成后门(asp,aspx,php,jsp,exe)等
  7. android 程序崩溃日记捕捉
  8. gitbook 入门教程之常用命令详解
  9. (五)深度学习和ResNet50的COVID-19诊断结果
  10. Redis学习之字典源码分析
  11. Jquery自定义$的名称(自定义变量)
  12. Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系
  13. mac 修改hosts不生效问题
  14. 嵌入式和单片机的区别到底在哪?
  15. vue图片压缩不失真_vue中实现图片压缩 file文件的方法
  16. Photoshop教程一:精细选择工具
  17. 使用github搭建网站
  18. 实验四+070+胡阳洋
  19. 《书中圣Inception》隐私策略
  20. linux 蓝牙模块,蓝牙模块在HHARM2410上的移植

热门文章

  1. 种树(codevs 1768)
  2. mac 安装memcached服务
  3. zend studio 10.6.2破解和汉化
  4. 【微型计算机原理与接口技术】寻址方式
  5. 【MyBatis笔记】05-传统开发模式DAO
  6. 无法进入页面,且浏览器调试界面->Timing报CAUTION:request is not finished yet!
  7. vnpy学习_02各文件功能梳理
  8. 如何用2分钟做出一张拥有“黑洞”和“脑洞”的热力地图?
  9. AS3 Signals之入门篇
  10. flexgdsgen