zoukankan      html  css  js  c++  java
  • 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"来包含相关头文件,就是因为头文件中包含了这些库函数的声明。
  • 相关阅读:
    float对内联元素和块元素的影响
    行内元素的困扰
    Nodejs同步和异步编程
    let、const、var的区别
    作用域
    SpringMVC
    MVC2新闻编译与发布
    JSP显示新闻
    servlet应用
    SWPU邮件登录界面的仿写(第二次作业)
  • 原文地址:https://www.cnblogs.com/xqisui/p/13742574.html
Copyright © 2011-2022 走看看