C 函数
函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

C 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

函数还有很多叫法,比如方法、子例程或程序,等等。

定义函数
C 语言中的函数定义的一般形式如下:

return_type function_name( parameter list )
{body of the function
}

在 C 语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
函数主体:函数主体包含一组定义函数执行任务的语句。
实例
以下是 max() 函数的源代码。该函数有两个参数 num1 和 num2,会返回这两个数中较大的那个数:

/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2)
{/* 局部变量声明 */int result;if (num1 > num2)result = num1;elseresult = num2;return result;
}

函数声明
函数声明会告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。

函数声明包括以下几个部分:

return_type function_name( parameter list );

针对上面定义的函数 max(),以下是函数声明:

int max(int num1, int num2);

在函数声明中,参数的名称并不重要,只有参数的类型是必需的,因此下面也是有效的声明:

int max(int, int);

当您在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,您应该在调用函数的文件顶部声明函数。

调用函数
创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。

当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。例如:

实例
#include <stdio.h>/* 函数声明 */
int max(int num1, int num2);int main ()
{/* 局部变量定义 */int a = 100;int b = 200;int ret;/* 调用函数来获取最大值 */ret = max(a, b);printf( "Max value is : %d\n", ret );return 0;
}/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2)
{/* 局部变量声明 */int result;if (num1 > num2)result = num1;elseresult = num2;return result;
}

把 max() 函数和 main() 函数放一块,编译源代码。当运行最后的可执行文件时,会产生下列结果:

Max value is : 200

函数参数
如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。

形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。

当调用函数时,有两种向函数传递参数的方式:

调用类型 描述
传值调用 该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数。
引用调用 通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。

默认情况下,C 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的实际参数。

C语言基础教程之函数相关推荐

  1. c语言指针地址交换程序,C语言-基础教程-指针的地址分配

    我们可以定义指针变量指向任何类型的变量.在上述的处理过程中,指针变量指向的变量通过传递变量的地址来实现.指针变量的取值是内存的地址,这个地址应当是安全的,不可以是随意的,否则,写入内存单元的值将会使得 ...

  2. R语言基础教程6:程序设计基础

    R语言基础教程1:数据类型 R语言基础教程2:散点图 R语言基础教程3:曲线图.误差线和图例 R语言基础教程4:柱形图 R语言基础教程5:图形页面排版 R语言基础教程6:程序设计基础 R语言基础教程7 ...

  3. c语言怎么做步骤循环,C语言基础教程之循环

    此程序已经陷入无限循环中,C语言基础教程之循环 当一段代码需要执行多次时,您可能会遇到这种情况.通常,语句按顺序执行:首先执行函数中的第一个语句,然后执行第二个语句,依此类推. 编程语言提供各种控制结 ...

  4. c+语言基础教程pdf下载,C语言基础教程.PDF

    目錄 Introduction 1.1 入门教程 1.2 helloworld 1.2.1 数值 .字符与字符串 1.2.2 运算符及表达式 1.2.3 选择结构与循环结构 1.2.4 函数基本概念及 ...

  5. c语言教程在线阅读,《C语言基础教程》.doc

    <C语言基础教程>.doc C语言基础教程(一) 网上收集整理 Turbo C语言概述 1.1 C 语言的产生与发展 C 语言是1972年由美国的Dennis Ritchie设计发明的, ...

  6. C语言基础教程 之 系统关键字

    C语言基础教程目录:https://blog.csdn.net/SparkLee2013/article/details/85229406 C语言的系统关键字总共有32个 1)数据类型关键字(12个) ...

  7. c 语言 字符 r,R语言基础教程之字符串

    原标题:R语言基础教程之字符串 在R中的单引号或双引号中写入的任何值都将被视为字符串.在R内部将每个字符串存储在双引号内,即使您使用单引号创建它们. 适用于字符串构造的规则 字符串开头和结尾的引号应为 ...

  8. c++语言基础教程第三版习题答案,《C++语言基础教程》吕凤翥习题答案

    <<C++语言基础教程>吕凤翥习题答案>由会员分享,可在线阅读,更多相关<<C++语言基础教程>吕凤翥习题答案(66页珍藏版)>请在人人文库网上搜索. ...

  9. c语言教程变量,C语言-基础教程-C语言常量与变量

    考试大计算机等级站整理: 2.2.1 标识符命名 在C语言中,标识符是对变量.函数标号和其它各种用户定义对象的命名.标识符的长度可以是一个或多个字符.绝大多数情况下,标识符的第一个字符必须是字母或下划 ...

最新文章

  1. Python知识: scipy signal.chirp用法例
  2. 页游开发_小花仙即将出手游,敬童年一起玩过的7K7K和4399
  3. KlayGE中的FXAA已经完成
  4. mysql sql select_mysql SQL Select 语句 简单应用
  5. 计算机组成800H是多大,73计算机组成原理模拟题三(2019年)更新北理工20春答案...
  6. 5000起步没商量!vivo NEX 3S 5G手机正式发布:骁龙865+无界瀑布屏加持
  7. sublime报错信息乱码_解决Sublime Text 3在GBK编码下的中文乱码问题
  8. Android MediaPlayer 属性
  9. 李炎恢老师的php源码以及附带一个php手册
  10. 二进制转bcd码c语言程序,微机课设求助 BCD码转换为二进制
  11. py12306 购票助手
  12. mysql 数组_mysql怎么存数组
  13. android客户端功能,人人网Android版手机客户端功能详解
  14. migration php,Lavarel常用语句之Migration
  15. Java Double equals()方法具有什么功能呢?
  16. js获取地理位置的经纬度
  17. 一键拼接微信好友头像
  18. 响应式网站设计:利用Bootstrap设计响应式网站-index.html
  19. LCD、OLED、QLED、microLED,细说各种显示技术
  20. 逆向破解——和什么叫渗透

热门文章

  1. Navicat的使用,连表查询,python代码操作sql语句
  2. Java--文档注释
  3. less(css)语言快速入门
  4. 情况控件Android layout_weight用法图解
  5. PIL Error, TypeError: Cannot handle this data type:(1, 1), <i8
  6. tensorflow随笔——简单的卷积神经网络分类实例
  7. lnk2019 mysql_C++使用MySQL-Connector/C++连接MySQL出现LNK2019错误的解决方法
  8. python自动化测试难不难_我从功能测试进阶到自动化测试工程师的经验总结~|Atstudy...
  9. js 随机数_JS常用方法和一些封装:随机数生成
  10. 用集合return多个值_Laravel + Nestedset 扩展:嵌套集合模型实现无限级分类