C语言(四)

C语言的函数(面向过程)

函数是C语言的基本单位

为什么需要函数

  • 避免了重复性操作
  • 有利于程序的模块化

什么叫函数

  • 逻辑上:能够完成特定功能的独立的代码单元
  • 物理上:能够接收数据(也可以不接收数据),并对接收数据进行处理,能够将数据处理的结果返回(也可以不返回结果)
  • 总结: 函数是一个工具,它是为了解决大量类似问题而设计的

定义函数

函数的返回值 函数名(函数的形参列表){
    函数执行体
}

注:如果函数名前的返回值类型与函数执行体中的return表达式不同,则最终函数返回类型以函数名前的返回类型为准。

int f(){
    return 10.5;//函数类型为int,所以f()最终返回10
}

return和break的区别

  • 终止被调函数,向主调函数返回表达式的值
  • 若表达式为空,则只终止函数,不向主调函数返回任何值
  • break用来终止循环和switch,return用来终止被调函数

函数的分类

有/无参函数

int f(void);//无参函数
int f(int x);//有参函数

有/无返回值函数

return;//无返回值
return 0;//有返回值

库函数和用户自定义

普通函数和主函数(main函数)

  • 一个主程序有且只能有一个主函数
  • 主函数可以调用普通函数,普通函数不能调用主函数
  • 普通函数可以相互调用
  • 主函数是程序的入口也是程序的出口

函数的声明

void f(void);//函数定义若放于main函数之后,需要在main函数之前先对函数进行声明
int main(){
    f();
    return 0;
}
void f(void){
    printf("哈哈\n");
}

注:函数的定义应放于函数调用之前,否则应在函数调用前进行声明。
对库函数的声明是通过#include<库函数所在的文件名>实现的

形参和实参

void f(int x,float y);//x,y是形参
f(10,8.2);//10,8.2是实参

注:形参与实参应满足:个数相同、位置一一对应、数据类型必须相互兼容

int g(int i) {
    i = 1;
    return 0;
}
int main() {
    int a = 2;
    g(a);
    printf("%d\n",a);//最终输出为2
    return 0;
}

注:形参永远无法改变实参的值(以上改变变量的值的方法可以用指针实现,详情参见C语言(五)博客。

变量

按作用域分类

全局变量

在所有函数外部定义的变量叫全局变量

局部变量

在一个函数内部定义的变量或者函数的形参都统称为局部变量

int k = 100;//k是全局变量

void f(int i){
    int j = 20;
}   //i和j都属于局部变量

注:全局变量的作用域是从定义位置开始到整个程序结束,局部变量只能在本函数内部使用

全局变量与局部变量命名冲突的问题

在一个函数内部如果定义的局部变量的名字和全局变量名一样时,局部变量会屏蔽全局变量。

按变量的存储方式分类

  • 静态变量
  • 自动变量
  • 寄存器变量

   转载规则


《C语言(四)》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录