函数

来源:互联网 发布:音乐自学软件 编辑:程序博客网 时间:2024/05/17 06:20

1.函数是实现一定任务的语句的集合名称。

 

2.参数是程序传递给函数的信息。

 

3.函数的返回值决定了函数的类型。

 

4.形参和实参:

形参:函数定义中出现的参数名

实参:当函数调用另一个函数时,传递给被调用函数的值被称为实参

传递给函数的实参可以是常数或变量,数值或变量的类型必须与形参匹配

 

5.函数如何使用堆栈

程序用堆栈来暂时存储详细信息。堆栈的基本木的是用来支持函数调用,

当程序调用函数时,C将函数调用后面的指令地址(成为返回地址)压入堆栈,然后,C将函数的参数从右至左一次压入堆栈,最后,如果函数声明了局部变量,C将堆栈空间分配给函数以存储变量的值。

 例如:function(1,2,3);

 

局部变量123返回地址

 

当函数结束时,C释放存储局部变量和参数的堆栈空间。然后,C根据返回地址判断出现下一步要执行的指令。C从堆栈中移走返回值并将地址IP(Instruction Pointer, 指令指针)寄存器中。

 

 6.传值调用

调用函数之后并不改变传递的原始参数的值,传递给子函数的只是一个副本。

 

输出结果为:

25

10

 

7.传址调用

调用函数之后可以改变传递的原始参数的值,传递给子函数的除了一个副本外,还有变量的内存地址

使用传址调用时,必须使用指针。

 

传址调用时要求调用函数的实参用地址值,而被调用函数的形参用指针,于是函数之间进行地址值的传递。这种传递是将实参的变量地址值传递给形参指针,即让形参指针指向实参变量,这种传递方式与调用函数拷贝实参值的副本给形参是不同的,它是让形参指针直接指向实参的变量。这种传址调用具有如下特点:被调用函数中可以通过改变形参所指向的内容来改变调用函数的实参值:这一特点与前面讲过的传值调用是截然不同的。传址调用可以通过改变形参所指向的内容来改变实参值,这就提供了函数之间进行信息传递的又一渠道,并且这种传递信息的方式还可以克服前面讲过的返回值方式的只传一个信息的局限性。因此,传址调用在C语言函数调用中是经常采用的方式。后面还会看到这种调月方式将会带来其他好处。

 

8.静态变量

使用static关键字声明静态变量,它使编译器在两次函数调用之间保留变量的值

函数声明静态变量时,允许初始化变量

声明静态变量时,C编译器并不把变量存放在堆栈中,而是把变量存放在数据段中,所以它们的值能够保留下来

 

9.递归可能大大增加程序的执行时间开销,可使用for循环或者while循环替代递归,提高创新的性能

 

10.const关键字通知编译器函数不应当改变指定参数的值。如果函数试图改变参数值,编译器将出错