一、初见函数

求出1到10、20到30和35到45的三个的和

#include <stdio.h>

// 定义一个函数
void sum(int begin, int end)
{
int sum = 0;
int i = 0;
for (i = begin; i <= end; i++)
{
sum += i;
}
printf("%d到%d的和是%d\n", begin , end , sum);
} int main()
{
sum(1,10);
sum(20,30);
sum(35,45);
return 0;
}

二、函数的定义和使用

  1. 函数是一块代码,接收零个或者多个参数,做一件事,并返回另个或者一个值
  2. 其他的和java差不多,这里就不详细记录了

从函数中返回值

// 定义返回值的类型
int max(int a , int b)
{
int ret;
if (a > b){
ret = a;
}else{
ret = b;
}
// 这个就是返回值
return ret;
} int main()
{
// 接收返回的值
int x = max(3,6);
printf("%d\n", x); return 0;
}

三、函数的先后关系

像上面把max函数写在上面是因为:

  1. c的编译器自上而下的顺序分析你的代码
  2. 在看到max函数的时候,他要知道max函数的样子
  3. 也就是max函数需要几个参数,每个参数如何,返回什么类型
  4. 如果main函数写在上面的话,需要把自己定义的函数先进行声明,但是现在大部分编译器也可以不用声明了
// 进行声明
int max(int a , int b); int main()
{
int x = max(3,6);
printf("%d\n", x);
return 0;
} // 定义返回值的类型
int max(int a , int b)
{
int ret;
if (a > b){
ret = a;
}else{
ret = b;
}
// 这个就是返回值
return ret;
}

参数传递

类型不匹配?

  1. 调用函数时给的值与参数的类型不匹配是C语言传统上最大的漏洞
  2. 编译器总是把你类型转换好,但这可能不是你所期望的
  3. 后面的语言,c++/java在这方面很严格
void cheer(int i)
{
printf("cheer %d\n", i);
} int main()
{
double f = 8.4;
cheer(f); // 8
cheer(2.0); // 2 return 0;
}

四、传值

  1. 每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
  2. 过去,对于函数参数表中的参数,称“形式参数”,调用是给的参数叫“实际参数”

五、本地变量(局部变量)

  1. 函数的每次运行,就产生一个独立的变量空间,在这个空间中的变量,就是函数的这次运行多独有的,称之为本地变量
  2. 定义在函数内部的变量就是本地变量
  3. 参数也是本地变量

变量的生存期和作用域

  1. 生存期:什么时候这个变量开始出现了,什么时候消亡了
  2. 作用域:在代码的什么范围内可以访问这个变量
  3. 对于本地变量:前面两个问题的答案都是 --- 在大括号内

本地变量的规则

  1. 本地变量都是定义在块(大括号)内的

    • 他可以是定义在函数的块内
    • 也可以定义在语句的块内
  2. 程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了
  3. 块外面定义的变量在里面仍然有效
  4. 块里面定义了和外面同名的变量则覆盖了外面的
  5. 不能在一个块内定义同名的变量
  6. 本地变量不会被默认初始化
  7. 参数在进入函数的时候会初始化

最新文章

  1. 如何让一个类可以被foreach枚举?
  2. chosen组件实现下拉框
  3. mm/memory
  4. .net多线程的发展
  5. IRP IO_STACK_LOCATION 《寒江独钓》内核学习笔记(1)
  6. 动画的button(按下时缩小,松开时恢复)
  7. 有很多10或100开头的IP在频繁访问ECS的原因
  8. 使用API网关构建微服务
  9. 修改窗口属性(全部都是SetWindowLong设置)
  10. 使用Eclipse搭建C/C++开发环境(转)
  11. TraceView简单使用方法
  12. Lucene 实例教程(二)
  13. 用户注册登录系统 V2.0
  14. JNI实战(一):JNI HelloWorld
  15. drools规则引擎中易混淆语法分析_相互触发导致死循环分析
  16. 引用变量 php面试总结1
  17. postgresql命令
  18. eclipse解决js提示
  19. Using a ScrollView - RN4
  20. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十一):服务网关(Zuul)

热门文章

  1. SpringCloud阶段总结
  2. 一个简单的Python调度器Schedule
  3. Gym 101510C
  4. 操作系统-IO管理疑难点
  5. Spring框架入门之基于Java注解配置bean
  6. MSIL实用指南-加载和保存参数
  7. 重温Android和Fragment生命周期
  8. Immutable Object模式 - 多线程
  9. Codeforces 939 D Love Rescue
  10. 楼房重建 HYSBZ - 2957