深入剖析c++函数的参数传递机制

深入剖析c++函数的参数传递机制

ID:5508200

大小:85.00 KB

页数:8页

时间:2017-12-16

深入剖析c++函数的参数传递机制_第1页
深入剖析c++函数的参数传递机制_第2页
深入剖析c++函数的参数传递机制_第3页
深入剖析c++函数的参数传递机制_第4页
深入剖析c++函数的参数传递机制_第5页
资源描述:

《深入剖析c++函数的参数传递机制》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、深入剖析C/C++函数的参数传递机制首先,这篇文章针对近期网友在ARX版块的提问,很多都是在调用ARX函数或者设计自定义函数时出现的困惑,为方便大家分析和理解问题,进而正确解决问题,我将个人的一些理解写成文字,希望对大家在做ARX程序设计时有所帮助。同时,这篇文章也为“ObjectARX程序设计入门(2)”作些准备工作。这篇文章与普通的C/C++教材相比,可能要深入得多,阅读时应该细心。而对于未接触过C语言的读者来说,大概需要先阅读一般的C++教材。我的看法,《C++编程思想》和《深入浅出MFC》一类的书对于初学

2、者太过深入,而类似《Visual C++ 6.0从入门到精通》的书籍主要篇幅在介绍VC软件的使用方法而不是讲解C++程序设计方法,它们都不适宜作C++或ARX程序设计入门学习用书。我个人学习C++使用的是南京大学出版社的书名就是《C++教程》,它是为C程序员编写的C++教材,全书仅130多页,内容浅显但基本够用。不过那是上世纪90年代初出版的,现在大概不好找了,不过类似的(比如说大学教材)我想书店里还是有的。文章中的大部分内容是我个人的看法,一般的C++书籍上找不到类似的说法与其比较,对于其正确性,我没有十足的把

3、握。各位网友可以对此进行讨论或者批评。(只是不要真的用砖头砸,那样对于我英勇而忙碌的医护人员太不尊重,别再给他们添乱了。)C语言的函数入口参数,可以使用值传递和指针传递方式,C++又多了引用(reference)传递方式。引用传递方式在使用上类似于值传递,而其传递的性质又象是指针传递,这是C++初学者经常感到困惑的。为深入介绍这三种参数传递方式,我们先把话题扯远些:1、 C/C++函数调用机制及值传递:在结构化程序设计方法中,先辈们告诉我们,采用“自顶向下,逐步细化”的方法将一个现实的复杂问题分成多个简单的问题来

4、解决。而细化到了最底层,就是“实现单一功能”的模块,在C/C++中,这个最小的单元模块就是函数。然而,这些单个的模块(或者说函数)组合起来要能完成一项复杂的功能,这就注定各个函数之间必然要有这样或那样的联系(即耦合)。而参数耦合是各个函数之间最为常见的耦合方式,也就是说,各个函数之间通常通过参数传递的方式来实现通讯。当我们设计或者调用一个函数时,首先要注意的是函数的接口,也就是函数的参数和返回值。调用一个函数就是将符合函数接口要求的参数传递给函数体,函数执行后返回一个值给调用者。(当然,C/C++允许void类型

5、的参数和返回值。当返回值为void时,函数类似Basic的Sub子过程或者Pascal的Procedure过程。)函数的参数传递,就是将在函数体外部已赋值(或者至少已经定义并初始化)的变量通过函数接口传递到函数体内部。根据变量种类的不同,有不同的参数传递方式:若传递的参数是一个类对象(包括象Int和float这样的C/C++内部数据类型),这种传递方式为值传递。C/C++这种以函数为主体的语言中,几乎所有的功能都是通过函数调用来实现的。<不是吗?你说C/C++运算符操作?还有变量声明?你先等等,接下来我们就看看C

6、++中这些操作是怎么实现的。>以下的C/C++代码是如此的简单,可能你从未想过还有什么要分析的,但它确实是函数值传递方式的典型例子。 float x = 0.254; float y = 3.1415; float z = x + y;以上代码编译执行时,第一步float x,即声明一个实数变量。即将标志符x认为是一个实数变量,并调用float类的初始化函数。当然你可能感觉不到它的存在,因为现在的CPU都直接支持浮点运算,它只是一条汇编指令而已。初始化完成后,调用赋值函数: x.operator = (0.254

7、);   不要奇怪以上函数的写法,它实际上与 x = 0.254; 效果完全相同,会产生同样的汇编代码。该函数首先根据变量x的数据类型分配合适的内存空间,并将该内存地址与标志符x关联。然后将立即数0.254写入分配的内存。(这里借用汇编语言的术语,立即数可以理解为程序已指定的具体数值。)然而,赋值函数的设计者并不能获知立即数0.254的数值,调用该函数时就必须通过参数传递的方法将数值通知给函数体。赋值函数接口大致是这样: float float::operator = (register float a);变量a

8、是在CPU寄存器中使用的临时变量。调用赋值函数时,将0.254送到寄存器变量a中,再将a值送到变量x所在的内存位置中。以上函数的返回值用于类似这样的链式表达式的实现:  x = y = z;说了许多,好象十分复杂,其实赋值操作仅仅只是两条汇编代码:  mov AX, 0.254   mov [x], AX事实上,它之所以简单,仅仅是因为float是CPU能直接处理的数据类

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。