西交《程序设计基础》faq(五)
西交《程序设计基础》FAQ(五)第五章 函数
一、在C语言中,函数的实参和形参之间是如何进行数据传递的?
当调用函数时,实参把自己的值复制一份传递给形参,然后形参用获得的值参加运算。这也就是所谓的“值传递”。需要注意的是,因为形参和实参各自有自己独立的存储空间,因此,形参值的改变不会影响实参的值,所以这种传递方式又称之为“单向传递”。也就是说,数据只能从实参传递给形参,而形参的值不能带回给实参。 但是,如果采用数组名或指针做函数参数的时候,情况就大不相同。因为数组名或指针作为函数的参数时,传递的并不是数据的值,而是地址,也就是所谓的“地址传递”。当函数调用时,形参和实参会共享同一段内存空间,那么,一旦形参数据单元的值发生了变化,对应的实参单位的值也自然会发生变化,这样就能实现所谓的“双向传递”了。二、在C语言中,怎样理解函数的嵌套调用、递归调用?
需要明白的是:函数嵌套是语言特性,递归调用是逻辑思想。
函数的嵌套调用是指一个函数中调用了另一个函数。当发生了嵌套调用时,程序控制按照“逐级调用,逐级返回”的方式进行。
嵌套调用是一个语言提供的程序设计的方法,也就是语言的特性。
而递归是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作,比如说一个和尚要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。
如果在嵌套调用中一个函数调用了它自已,就构成了一种的嵌套调用,这时称为递归调用。递归调用在理解上较嵌套调用更为抽象,递归最明显的特点就是,自己调用自己(不就嵌套调用了嘛)。
概括说,函数嵌套就是函数调用函数,是普遍的,递归就是函数调用自身,使函数嵌套的一个特例。三、C语言中全局变量的作用域一定比局部变量的作用域大,对吗?
这种说法是错误的。如果同一个源文件中,只有一个主函数,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。所以是错的。四、在C语言中,内部函数和外部函数的区别?
内部函数跟外部函数的区别在于:
一个文件中定义的函数能否被其它文件调用。能被调用的函数在前面加extern(一般省略),而不能被调用的加static(不能省略),通常函数本质上是全局的,也就是外部的可调用的。
我们通常调用的#include<stdio.h>本质上就是一些外部函数的集合,由于在一个文件中的函数要调用另外一个文件的函数,要求在开始声明一下,为了省略这些声明,我们引用include命令。五、从函数定义过程角度来讲,函数可分为哪两类?分别有什么含义?
从函数定义的角度看,函数可分为库函数和用户定义函数两种。
库函数:由C系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用。在前面各章的例题中反复用到printf 、 scanf 、 getchar 、putchar、gets、puts、strcat等函数均属此类。
用户定义函数:由用户按需要写的函数。对于用户自定义函数,不仅要在程序中定义函数本身, 而且在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。六、从函数返回值角度来讲,函数可分为哪两类?分别有什么含义?
C语言的函数兼有其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为有返回值函数和无返回值函数两种。
1)有返回值函数
此类函数被调用执行完后将向调用者返回一个执行结果, 称为函数返回值。如数学函数即属于此类函数。 由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。
2)无返回值函数
此类函数用于完成某项特定的处理任务, 执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。 由于函数无须返回值,用户在定义此类函数时可指定它的返回为“空类型”, 空类型的说明符为“void”。七、从主调函数与被调函数之间数据传送角度来讲,函数可分为哪两类?分别有什么含义?
从主调函数和被调函数之间数据传送的角度看又可分为无参函数和有参函数两种。
1)无参函数
函数定义、函数说明及函数调用中均不带参数。主调函数和被调函数之间不进行参数传送。 此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。
2)有参函数
也称为带参函数。在函数定义及函数说明时都有参数,称为形式参数(简称为形参)。在函数调用时也必须给出参数, 称为实际参数(简称为实参)。 进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。
本内容由易百网整理发布
网址 www.openhelp100.com
联系方式QQ 515224986
页:
[1]