一文剖析C语言函数

打印 上一主题 下一主题

主题 750|帖子 750|积分 2250

文章目录



前言

       函数是C语言重要的一个组成部分,可以这么说,只要是使用C语言来写一个项目,那么就必须会使用到函数这个功能,也正因为函数的存在,使得我们在编写代码时能够模块化,一个函数对应一个功能,避免重复造轮子。本文将通过先理论后实战的方式来为大家进行C语言函数的讲解。
一、函数的定义

1. 何谓函数?

       C语言中的函数其实就是为了完成一个特定功能的代码模块,也就是说一个函数就是一个小功能。当我们在某种场景下需要实现这个小功能那么也就只需要调用这个函数即可,倘若没有函数这个功能的话,我们可能就要每次实现一个功能的话就要实现其完整过程,但是每次的操作都是一样的,这样我们的代码就会有很多一样的地方,这样不仅代码可读性低,而且体积大,且都是重复的,这一点肯定是不能接受的。而函数的引入就解决了这一难题。对于一个大项目中,我们可以将其拆分为若干个小的项目,每一个小的项目又有若干个小功能,通过若干个函数对其进行封装并实现,最终实现整个项目。
2. 如何定义函数?

2.1 函数的定义(重要理论)

  1. <数据类型>  <函数名称>( <形式参数1, 形式参数2, ......> )
  2. {
  3.      语句序列;
  4.      return [(<表达式>)];
  5. }
复制代码

  • 数据类型:
    (1)数据类型是整个函数的返回值类型。 return 后面的表达式类型需要这里的数据类型保持一致。
    (2)如果对于一个函数不想返回值,那么返回值类型应该写成 void。
    (3)如果返回值类型写成 void,那么该函数可以不用写 return,也可以写成 return ;,也就是 return 后面的表达式需要省略。
    (4)如果一个函数的数据类型省略了,那么函数的数据类型就是 int 类型。,换句话讲,当函数的返回值类型为 int 时,和返回值不写的效果是一样的。但是站在编程规范的角度来看,省略函数的数据类型这种做法是不被推荐的。
  • 函数名称:
           须遵循C语言标识符命名规则即可。
  • 形式参数:
           这里是函数的形式参数,简称形参,形参由变量数据类型加 变量名组成,倘若有多个形式参数,每个形式参数用逗号分隔开。形参在括号的里面,如果没有形参可以省略不写,可以只写一个 void,但是括号不能省略。
           形式参数的作用域只能在函数的大括号中进行访问。函数外部不能进行访问。通过这句话也就间接表明,我们可以在函数的外面以及函数的形参那里分别定义相同的变量,以及两个变量的数据类型相同,函数外面的变量作用域在函数的外面,函数的形参作用域在函数里面,他们两个最然变量名相同,但是作用域不同,也就是两个变量的地址空间不一样,操作其中任何一个变量,另一个同名的变量不会受影响。这点对于新手尤其值得注意。
  • 一对大括号:
           大括号里面就是函数的实现过程,由若干语句序列组成。调用一个函数函数,也就是会执行大括号中的每一条语句。
  • return
           return后面的表达式就是函数的返回值。当一个函数运行到 return 时,函数就会退出,函数后面的语句也就不会运行,当一个函数没有 return 时,那么函数会运行到大括号中的反括号前面一条有效执行的语句时退出。
   知识点补充:
  

  • 函数在调用时参入的参数为实参,函数括号里面的参数为形参,函数在调用时,实参会对形参进行赋值操作。
  • 函数的定义如果写在 main() 函数之后,需要先进行函数声明,写在 main() 函数之前不需要声明。
  • 函数的声明可以放在函数的调用前面任何位置。甚至可以放在 main() 函数里面,但是一般不推荐。
  • 当形参是以数组的形式进行传递时,其实本质也就是在传递指针。把数组作为实参进行传递时,其实就是把实参的数组的首地址进行了传递,因此如果我们想要在函数中访问数组的全部变量时还需要传递数组元素的个数。因为是以指针的方式传递,所以在函数中对形参数组进行 sizeof 运算时大小只有 4 字节,同时这也就说通了为什么传递数组时必须要传递数组元素的个数。
  2.2 小试牛刀

        通过上面的讲解来具体实现一个函数吧。要求:求一个数的阶乘。
源代码:
[code]#include /*函数声明*/int sum_func(int n);int main(){    int data = 0;    int sum = 0;    printf("please input a num: ");    scanf("%d", &data);    while (data < 0) {        printf("input errror! please input again: ");        scanf("%d", &data);    }    sum = sum_func(data);  //data为实参    printf("%d! = %d\n", data, sum);    return 0;}/*函数的返回值类型是 int。函数名是 sum_func函数只有一个形参,形参是 int 类型。*/int sum_func(int n){    int i = 1, sum = 1;    if (n < 0) {        return -1;    } else if (n == 0) {        return 1;    } else {        while (i
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表