C语言基础-函数
自创函数
C语言提供了大量的库函数: 比如 stdio.h
提供输出函数
自定义函数的一般形式:
注意:
[]
包含的内容可以省略,数据类型说明省略,默认是int
类型函数; 参数省略表示该函数是无参函数,参数不省略表示该函数是有参函数;- 函数名称遵循标识符命名规范;
- 自定义函数尽量放在
main
函数之前,如果要放在main函数后面的话, 需要在main函数之前先声明自定义函数,声明格式为:[数据类型说明] 函数名称([参数]);
函数调用
我们需要用到自定义的函数的时候,就得调用它,那么在调用的时候就称之为函数调用。
在C语言中,函数调用的一般形式为:
函数名([参数]);
注意:
- 对无参函数调用的时候可以将()包含的省略
- ()中可以是常数,变量或其它构造类型数据及表达式,多个参数之间用逗号分隔。
有参与无参
在函数中不需要函数参数的称之为无参函数,在函数中需要函数参数的称之为有参函数。
有参和无参函数的一般形式如下:
有参函数和无参函数的唯一区别在于:函数 ()
中多了一个参数列表。
- 有参函数更为灵活,输出的内容可以随着n的改变而随意变动,只要在main函数中传递一个参数就可以了
- 而在无参函数中输出的相对就比较固定,当需要改动的时候还需要到自定义的方法内改变循环变量的值。
形参与实参
函数的参数分为形参和实参两种。
- 形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。
- 就类似小明,说了的话而不实际行动;
- 实参是在调用时传递该函数的参数。
- 就如小刚能实际行动起来。
函数的形参和实参具有以下特点:
- 形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。
- 函数调用结束返回主调函数后则不能再使用该形参变量。
- 实参可以是常量、变量、表达式、函数等。
- 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值等办法使实参获得确定值。
- 在参数传递时,实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。
函数的返回值
函数的返回值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。
函数的返回值要注意以下几点:
- 函数的值只能通过
return
语句返回主调函数。
return 表达式 或者为: return (表达式);
- 函数值的类型和函数定义中函数的类型应保持一致。
- 如果两者不一致,则以函数返回类型为准,自动进行类型转换。
- 没有返回值的函数,返回类型为
void
。
注意:
void
函数中可以有执行代码块,但是不能有返回值.void
函数中如果有return
语句,该语句只能起到结束函数运行的功能。其格式为:return;
内部函数与外部函数
- 在C语言中不能被其他源文件调用的函数称谓内部函数 ,内部函数由static关键字来定义,因此又被称谓静态函数,形式为:
static [数据类型] 函数名([参数]) - 这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。
- 在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为:
extern [数据类型] 函数名([参数]) - C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。
静态变量只赋值一次
外部函数练习
hello.c
#include <stdio.h> #include "test.c" //引用test.c文件 extern void printLine() //这里定义的方法对吗? { printf("**************\n"); } int main() { say(); return 0; }
test.c
#include <stdio.h> void printLine(); static void say(){ printLine(); printf("I love imooc\n"); printf("good good study!\n"); printf("day day up!\n"); printLine(); }
对于hello.c来说,直接引入了test.c文件。那么就可以调用testc中的static方法say()
而对于test.c并没有引入,可以通过声明来调用另一个源文件中暴露出来的方法。
输出:
************** I love imooc good good study! day day up! **************************** I love imooc good good study! day day up! **************
Songzhibin