4.C语言函数

C语言函数

函数的定义

  • 语法格式

    函数返回值的类型 函数名(行参类型 行参1, 行参类型 行参2, ...) /*函数首部*/
    {
      /*函数体*/
      声明部分;
      语句部分; 
    }
    
  • 说明

  1. 在定义时,若省略了函数返回值的类型,则默认为int型。
  2. 在同一程序中,函数名必须唯一;同一函数中,行参名也必须唯一。
  3. 行参之间用逗号隔开,可以没有行参。
  4. 除行参外,凡是在函数中用到的变量或是其它函数必须先进行声明,再使用。
  5. 行参和函数体中的变量只在函数被调用时才临时分配存储单元。
  6. 函数的定义时平行的,不能再一个函数内部再定义函数。

函数的返回值

函数的返回值通过return语句返回。

  • 语法格式

    return [expression];
    
  • 说明

  1. 函数定义的类型决定函数返回值的类型,若不一致,则自动转换为函数定义类型。
  2. 为了明确说明函数无返回值,可将函数的返回值类型定义为“void”,称为“空类型”。

函数的调用

  • 语法格式

    函数名(实参1,实参2,...)
    
  • 说明

  1. 实参与行参在个数、类型及次序上应保持一致。
  2. 函数必须先定义或声明,后调用。返回值类型为int或char的函数可例外。
  3. 实参向行参传递数据时按位置对应传递,而不是按名字对应传递。
  4. 当实参表包含多个参数时,对实参表的求值顺序因C语言的版本不同而有所不同。如max(i,++i)。
  5. 传值调用:实参向行参传递的数据是一种单向传递。实参的值传递给对应的行参,但行参的值不回回传给实参。
  6. 传址调用:数组或指针类型实参是将变量在内存中的首地址传递给行参,这样实参和行参中用相同的内存空间,在函数调用结束后,实参变量的值也将发生变化。
  7. 嵌套调用:函数的定义不允许嵌套,但函数的调用可以嵌套,即在调用一个函数的过程中,又调用另一个函数。
  8. 递归调用:函数可以直接或间接地自己调用自己。(递推是由已知求未知,递归则相反)。

函数的声明

凡是未在调用之前定义的函数,C编译程序默认其返回值类型为int。

对于返回值为其它类型的函数,若把函数定义放在调用之后,则应在调用之前对函数进行声明。

  • 语法格式

    类型名 函数名(行参类型1 行参1,行参类型2 行参2,...)
    
  • 说明

  1. 函数声明中的行参名是一种虚设,它们可以是任意的用户标识符,既不必与函数首部中的行参名一致,又可与程序中任意的用户标识符相同。因此,参数名可以省略。但参数的类型、个数和次序必须与函数定义的首部保持一致。
  2. 函数的声明与定义不同。定义是写出函数的完整形式,而声明是告诉系统此函数的返回值类型、参数类型及个数。
  3. 若函数的返回值类型为int或char,则可不必进行函数声明。但此时系统无法对参数做类型检查。
  4. 若定义在前,调用在后,则可不进行函数声明。
  5. 放在调用函数的声明部分,则只有此函数可以识别被调函数。
  6. 放在所有函数的外部且在被调用之前,则函数声明位置后面的所有函数均可识别被调用函数。
  7. 调用库函数时,要在程序的开头使用"#include"来包含相关头文件,就是因为头文件中包含了这些库函数的声明。

 

posted @ 2020-09-27 23:41  向七岁  阅读(390)  评论(0编辑  收藏  举报