关于函数的10个问题

Question one:如何分辨函数的实参和形参?

函数的形参和实参具有以下特点:  

1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。  因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。  

2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。  

3.实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。  

4.函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的  值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

 

Question two:函数返回值要注意哪些东西?

对函数的值(或 称函数返回值)有以下一些说明:

1.函数的值只能通过 return 语句返回主调函数。 return 语句的一般形式为: return 表达式; 或者为: return (表达式); 该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个 return 语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值。

2. 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类 型为准,自动进行类型转换。

3. 如函数值为整型,在函数定义时可以省去类型说明。

4. 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。

 

Question three:函数调用有哪些方式?

在C语言中,可以用以下几种方式调用函数:

1. 函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运 算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把 max 的返回值赋予变量 z。

2. 函数语句:函数调用的一般形式加上分号即构成函数语句。例如: printf ("%d",a);scanf ("%d",&b);都是以函数语句的方式调用函数。

3. 函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作 为 实 参 进 行 传 送 , 因 此 要 求 该 函 数 必 须 是 有 返 回 值 的 。例 如 : printf("%d",max(x,y)); 即是把 max 调用的返回值又作为 printf 函数的实参来使 用的。在函数调用中还应该注意的一个问题是求值顺序的问题。所谓求值顺序是指对实 参表中各量是自左至右使用呢,还是自右至左使用。对此,各系统的规定不一定相同。 介绍 printf 函数时已提到过,这里从函数调用的角度再强调一下。

 

Question four:关于主调函数和被调函数的问题

1.如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。 这时系统将自动对被调函数返回值按整型处理。

2.当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数 再作说明而直接调用。

3.如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调 函数中,可不再对被调函数作说明。

4.对库函数的调用不需要再作说明,但必须把该函数的头文件用 include 命令包含在 源文件前部。

 

Question five:关于函数嵌套调用的问题

C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下 一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出 现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。

 

图表示了两层嵌套的情形。其执行过程是:执行 main 函数中调用 a 函数的语句时,即 转去执行 a 函数,在 a 函数中调用 b 函数时,又转去执行 b 函数,b 函数执行完毕返回 a 函数的断点继续执行,a 函数执行完毕返回 main 函数的断点继续执行。

 

Question six:函数的递归调用

一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允 许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自 身,每调用一次就进入新的一层。

 

Question seven:数组作为函数参数方法有哪些?

数组用作函数参数有两种形式,一种是 把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。

 

Question eight:什么是局部变量?要注意什么?

局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。

关于局部变量的作用域还要说明以下几点:

1.主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函 数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数 是平行关系。这一点是与其它语言不同的,应予以注意。

2.形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。 3.允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元, 互不干扰,也不会发生混淆。如在前例中,形参和实参的变量名都为 n,是完全允 许的。

4.在复合语句中也可定义变量,其作用域只在复合语句范围内。

Question nine:什么是全局变量?

全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于 一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为 extern。但在一个函数 之前定义的全局变量,在该函数内使用可不再加以说明。

 

Question ten:C语言中函数的分类

在C语言中可从不同的角度对函数分类。

1. 从函数定义的角度看,函数可分为库函数和用户定义函数两种。 1) 库函数:由C系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序 前包含有该函数原型的头文件即可在程序中直接调用。在前面各章的例题中反复用 到 printf、scanf、getchar、putchar、gets、puts、strcat 等函数均属此类。 2) 用户定义函数:由用户按需要写的函数。对于用户自定义函数,不仅要在程序中定 义函数本身,而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能 使用。

2. C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为 有返回值函数和无返回值函数两种。 1) 有返回值函数:此类函数被调用执行完后将向调用者返回一个执行结果,称为函数 返回值。如数学函数即属于此类函数。由用户定义的这种要返回函数值的函数,必 须在函数定义和函数说明中明确返回值的类型。 2) 无返回值函数:此类函数用于完成某项特定的处理任务,执行完成后不向调用者返 回函数值。这类函数类似于其它语言的过程。由于函数无须返回值,用户在定义此 类函数时可指定它的返回为“空类型”, 空类型的说明符为“void”。

3. 从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。 1) 无参函数:函数定义、函数说明及函数调用中均不带参数。主调函数和被调函数之 间不进行参数传送。此类函数通常用来完成一组指定的功能,可以返回或不返回函 数值。 2) 有参函数:也称为带参函数。在函数定义及函数说明时都有参数,称为形式参数(简 称为形参)。在函数调用时也必须给出参数,称为实际参数(简称为实参)。进行函 数调用时,主调函数将把实参的值传送给形参,供被调函数使用。

4. C语言提供了极为丰富的库函数,这些库函数又可从功能角度作以下分类。 1) 字符类型分类函数:用于对字符按 ASCII 码分类:字母,数字,控制字符,分隔符, 大小写字母等。 2) 转换函数:用于字符或字符串的转换;在字符量和各类数字量(整型,实型等)之间 进行转换;在大、小写之间进行转换。 3) 目录路径函数:用于文件目录和路径操作。 4) 诊断函数:用于内部错误检测。 5) 图形函数:用于屏幕管理和各种图形功能。 6) 输入输出函数:用于完成输入输出功能。 7) 接口函数:用于与 DOS,BIOS 和硬件的接口。 8) 字符串函数:用于字符串操作和处理。 9) 内存管理函数:用于内存管理。 10) 数学函数:用于数学函数计算。 11) 日期和时间函数:用于日期,时间转换操作。 12) 进程控制函数:用于进程管理和控制。 13) 其它函数:用于其它各种功能。

以上各类函数不仅数量多,而且有的还需要硬件知识才会使用,因此要想全部掌握则需 要一个较长的学习过程。应首先掌握一些最基本、最常用的函数,再逐步深入。由于课时关 系,我们只介绍了很少一部分库函数,其余部分读者可根据需要查阅有关手册。 还应该指出的是,在C语言中,所有的函数定义,包括主函数 main 在内,都是平行的。 也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之 间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还可以自己调用自 己,称为递归调用。 main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。因此,C程序 的执行总是从 main 函数开始,完成对其它函数的调用后再返回到 main 函数,最后由 main 函数结束整个程序。一个C源程序必须有,也只能有一个主函数 main。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值