函数可以分为无参函数和有参函数。

无参函数的定义

无参函数定义的一般形式如下:
返回值类型  函数名(){
    函数体
}

说明:

  • 返回值类型可以是C语言中的任意数据类型。
  • 函数名是标识符的一种,命名规则和标识符相同。函数名后面的括号( )不能少。
  • 函数体是函数需要执行的代码。即使只有一个语句,也要由{ }包围。
  • 在函数体中使用return语句返回数据。

例如,定义一个函数,计算1加到100的结果:

int sum(){
int i, sum=0;
for(i=1; i<=100; i++){
sum+=i;
}
return sum;
}

计算结果保存在变量sum中,通过return语句返回。sum为int型,所以返回值类型也必须为int,要一一对应。

return是C语言中的一个关键字,只能用在函数中,用来返回处理结果。

将上面的代码补充完整:

#include <stdio.h>

int sum(){
int i, sum=0;
for(i=1; i<=100; i++){
sum+=i;
}
return sum;
} int main()
{
int a = sum();
printf("The sum is %d\n", a);
return 0;
}

运行结果:
The sum is 5050

函数不能嵌套定义,main 也是一个函数定义,要将 sum 放在 main 外面。函数必须先定义后使用,所以 sum 只能在 main 前面。

注意:main 是函数定义,不是函数调用。当可执行文件加载到内存后,系统从 main 函数开始执行,也就是说,系统会调用我们定义的 main 函数。

无返回值函数

有的函数不需要有返回值,或者返回值类型不确定(很少见),那么用void表示,例如:

void hello(){
printf ("Hello,world \n");
//没有返回值就不需要 return 语句
}

void是C语言中的一个关键字,表示空类型或无类型,绝大部分情况下也就意味着没有 return 语句。

有参函数的定义

有参函数定义的一般形式如下:
返回值类型  函数名(参数列表){
    函数体
}

与无参函数相比,有参函数的定义多了“参数列表”。

定义一个函数求两个数中的最大值:

int max(int a, int b){
if (a>b){
return a;
}else{
return b;
}
}

参数列表可以是各种类型的变量,要指明数据类型和变量名称;各个参数之间用逗号,分隔。参数列表中给出的变量可以在函数体中使用。

函数定义时给出的参数称为形式参数,简称形参;函数调用时给出的参数称为实际参数,简称实参。函数调用时,将实参的值传递给形参,相当于一次赋值操作。注意:实参和形参的类型、数目必须一致。

将上面的代码补充完整:

#include <stdio.h>

int max(int a, int b){
if (a>b){
return a;
}else{
return b;
}
} int main(){
int num1, num2, maxVal;
printf("Input two numbers: ");
scanf("%d %d", &num1, &num2);
maxVal = max(num1, num2);
printf("The max number: %d\n", maxVal); return 0;
}

运行结果:
Input two numbers: 100 200
The max number: 200

定义max时,变量a、b的值都是未知的;调用max时,分别将num1、num2的值传递给a、b,类似于:

a=num1;
b=num2;

return 语句可以有多个,可以在函数体的任意位置;在max中,根据 if 的判断结果来执行不同的 return 语句。

最新文章

  1. 游戏中的人工智能——初探AI
  2. EF下CodeFirst、DBFirst与ModelFirst分析
  3. OpenLayer 3 鹰眼控件和全屏显示
  4. TxDragon的训练5
  5. 2017-07-04(sudo wc sort)
  6. drawnet.py绘制网络结构
  7. 【Vagrant】-NO.130.Vagrant.1 -【Vagrant】
  8. 【Entity Framework】Revert the database to specified migration.
  9. 3.GDScript(1)概览
  10. CSS text系列
  11. Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏
  12. 0_Simple__simpleSurfaceWrite
  13. 笨鸟先飞之Java(一)--使用struts2框架实现文件上传
  14. HDU1598 并查集+贪心
  15. Linux wget auto login and backup database
  16. CentOS+uwsgi+django+nginx 环境部署及分析
  17. Struts2常量详解
  18. day02.4-字典内置方法
  19. 对HashMap进行排序
  20. Java全局变量

热门文章

  1. silverlight .net后台 设置visifire控件图表样式 属性说明
  2. Access restriction: The type * is not accessible due to restrict,报错问题
  3. ios文件读取(二)
  4. hadoop容灾能力测试
  5. [转载]移动终端浏览器初始设置apple-mobile-web-app-capable
  6. Hdu1092
  7. HBase架构深度解析
  8. BZOJ 1565 植物大战僵尸
  9. gridview两列数据的互换
  10. jquery中table里面的tr里的input添加一行,并且第一列autoincrement