首页 > 代码库 > 7、C语言——函数

7、C语言——函数

函数

1、函数定义

    函数返回值类型 函数名(形式参数列表)
     {
        函数体;
     }

    注意:

      定义有参函数时,形参的定义可以采用传统方式或现代方式两种

      1)传统方式:

        int max(x,y)
        int x,y;不能定义形参以外的其它变量
        {}

      2)现代方式: 

        int max(intx,inty)
        {}

2、函数返回值类型

    形式1:
      int fun(int x, int y)
      {
        return 表达式;
      }

    注意:返回的值是给调用函数整体的形式,表达式是先计算后返回值

    形式2:
      void fun (int x)
      {
        一定不要加return语句;
      }

    注意:void没有预留存放返回值的空间

3、函数调用

    3个一致:个数、类型、位置

    方式1:非void型

    变量名=函数名(实参列表);

    方式2:void型

    函数名(实参列表);

4、函数原型声明

    形式1:函数类型 函数名(形参类型1 形参1,形参类型2 形参2...);

    形式2:函数类型 函数名(形参类型1 ,形参类型2...);

5、变量三属性

    变量三属性:类型——定义、作用范围——空间、存储类别——时间

    1)类型

      类型名 变量名列表;

    2)作用范围—— 局部变量和全局变量

      A、局部变量(或称内部变量)

        定义:在一个函数内部定义的变量

          a、局部变量只能在它所在的函数内有效

          b、在不同的函数中可以出现同名的变量,它们分别属于不同的变量

          c、复合语句中定义的变量只能在此复合语句中有效

          d、所有形式参数都是局部变量


       
B、全局变量(或称外部变量)

        定义:在函数外部定义的变量

          a、全局变量的有效范围是在本文件内从定义该变量的位置开始到本文件的结束

          b、 全局变量可以在它的有效范围内被每个函数引用

          c、在同一文件中若全局变量与局部变量同名,局部变量“屏蔽”全局变量

   
 3)存储类别格式:

      A、auto类别变量(可以省略)

        定义同时说明类别:

          (存储类别) 类型名 变量名

           a、auto类别变量用完后释放所占用空间

           b、局部变量默认为,无初始化时,初值为随机值auto类别

           c、使用时间短,一般都为auto类别变量



     
 B、static类别变量

        定义同时说明类别:

          存储类别 类型名 变量名

           a、static类别从定义到程序运行结束均占用存储空间

           b、全局变量默认为static类别,无初始化时,初值为0

           c、static类别变量只进行一次初始化

      
C、register类别变量

        定义同时说明类别:

          存储类别 类型名 变量名

            a、register类别只能是局部变量才能被说明

            b、一般不能直接使用


       
D、extern类别变量

          格式1:定义同时说明类别:

            存储类别 类型名 变量名;

          格式2:分别定义、说明

            类型名 变量名;

            存储类别 变量名;

              a、extern类别变量可以加大变量的作用范围

              b、两种说明格式

6、预编译命令

      预编译命令

      文件包含(include)

      #include<>——在指定的目录下库文件的搜索

      #include""——在指定标准的搜索路径下,在当前的工作目录或者子目录下进行搜索

7、宏

    第一种:无参宏定义

        格式:

          #define 宏名 宏内容

        功能:用一个指定的标识符(宏名)来代表一串字符(宏内容)

        注意:

          1)宏名我们一般用大写字母表示,遵守用户自定义标识符命名规则

          2)#define可以在函数外定义也可以在函数内定义,但该命令应该在单独一行上

            #undef命令可以提亲终止宏名的作用域

          3)在进行宏定义时,可以引用已经定义的宏名进行层层置换

          4)在进行宏替换时,必须先替换完所有的宏名再运算,同时体化过程中不能乱加括号

            原模原样替换然后按着优先级别计算,不要乱加括号

    第二种:带参宏定义

        格式:

           #define 宏名(参数列表)宏内容

        功能:提供了一种更加灵活的替换方式

        注意:

          1)在定义有参宏时,参数列表必须用一对小括号括起且小括号和宏名之间不能有空格

          2)对有参宏名进行替换时,需要将形参改成相应的实参,并且之一分清形参和实参的对应关系

8、小知识汇总 

    1)一个源程序文件可由一个或多个函数组成

       函数是C语言的基本单位

       main()函数由操作系统OS来调用的

       main()函数可以调用其他子函数,子函数可以调用其他子函数,子函数也可以自己调用自己

     2)一个C语言程序可以由一个或多个源程序文件组成

     3)C程序执行总是从main()开始,结束于main()结束;可调用其它函数

     4)函数不能嵌套定义,但可以互相调用,不能调用main()函数的分类

        嵌套定义:在一个函数中不能自己再定义一个函数

      5)类型区别

        原型声明——此时有函数返回值类型标识,有函数名,有参数类型,有分号

        调用函数——有函数名,有参数

        定义调用函数——有函数返回值类型标识,有函数名,有参数类型,无分号

      6)三大口诀

        口诀1:表达式—看其合法性,有短路优先考虑(与、或),挑运算符先计算运算级别高,同级情况下考虑结合性

        口诀2:找配对,找控制,标语句

        口诀3:遇到return或者}返回到被函数调用处

 

7、C语言——函数