关于第六章函数(c++)的讨论

函数

第一节 函数

首先要知道在编程过程中为什么要使用函数?函数的调用是不是使得c++的程序复杂了呢,而且没有什么实际用处呢?事实恰恰相反,函数的使用让程序 的可读性,可维护性更强。同时函数也可以被反复调用,也提高了模块的可复用性。

函数定义

了解什么是函数?它的具体形式是什么?

函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。咱们自己可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由自己来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

在 C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

· 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void

· 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。

· 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。

· 函数主体:函数主体包含一组定义函数执行任务的语句。

 

函数的形式

函数的形式从结构上说可以分为三种:无参函数,有参函数和空函数。但是他们的定义形式大致相同。

(1)无参函数

顾名思义极为没有参数传递的函数,无参函数一般不需要带回函数值,所以函数类型说明为void。

(2)有参函数

有参函数即为有参数传递的函数了,一般这种函数需要带回函数值。

(3)空函数

空函数就是空白的意思,函数体只有一对花括号,花括号内没有任何语句的函数。例如:

函数名()

{

        }

空函数不完成什么工作,只占用一个位置,在大型的程序设计中,这种空函数用来扩充其他函数的功能。

函数的声明与调用

函数的声明:函数声明会告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定在函数声明中,参数的名称并不重要,只有参数的类型是必需的义。当您在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,我们自己应该在调用函数的文件顶部声明函数。

函数的调用:创建 C++ 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。其实就是为函数分配储存空间,执行函数被其他函数调用的函数称为执行函数;调用其他函数的函数,称为调用函数。

当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

Tips:函数定义!=函数调用

调用函数的返回值:调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。

函数的传值调用

函数调用过程:

 

1.传值调用

这种调用方式是将实参的数据传递给形参,即将实参值拷贝一个副本存放在被调用函数的栈区中。被调用函数中,形参值可以改变,但不影响主调函数的实参值。参数传递方式只是从实参到形参,简称单向值传递。

2.传址调用

这种调用方式是将实参变量的地址值传递给形参,这时形参是指针,即让形参的指针指向实参地址,这里不再是将实参拷贝一个副本给形参,而是让形参直接指向实参,这就提供了一种可以改变实参变量的值的方法。

指针变量

对指针变量的介绍,举例如下:

                    int *p (定义指针变量)

                    int &x=y (x不分配新的空间,与y公用同一空间)

                    p=&x (取x地址)

                    y=*p (取p地址中的内容)

对于指针指向数组元素的介绍,举例如下:

                    int a[10] ,*p (定义指着变量)

                    p=&a[0](取a[0]地址)

                    p=a (取整个数组[a]的地址)

                    (p为变量,a为常量)

举个指针变量的经典例子:用指向数组的指针变量输出数组的全部元素;

                    int main ()

                    {

                            int a[10],i;

                            int *p;

                            for (i=0;i<=10;i++)

                            cin>>a[i]; (输入数组元素)

                            for (p=a;p<a+10;p++);(p=a:指针变量赋初值;p++指向下一元素)

                            cout<<*p<<'\t';(输出指针指向的数据)

                                                                }

实参形参

对于实参与形参,有以下四点需注意:

1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会发生类型不匹配的错误。
4、在一般传值调用的机制中只能把实参传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参值发生改变,而实参中的值不会变化。而在引用调用的机制当中是将实参引用的地址传递给了形参,所以任何发生在形参上的改变实际上也发生在实参变量上。

 

局部变量与全部变量

1,局部变量只在本函数范围有效,在此函数以外是不能使用这些变量;全局变量的有效范围是从定义变量的位置开始到本源文件结束。
2,局部变量是程序运行到该函数时给该变量分配内存空间,函数结束则释放该内存空间;全局变量是程序运行时事先分配内存空间,当程序结束时释放内存。

本节对于对函数的学习,我觉得以后对一些复杂程序的处理上有很多需要借鉴的地方,总体就是说,化繁为简,化抽象为具体,具体情况具体分析,更能清楚地了解代码中各部分的职责,也更方便对整个程序的维护,提高代码的利用率和使用效率,这就是IT人才的具体思路趋向吧应该,

 

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值