系列连载

  • 【python / C / C++】

参考

  • 《C语言程序设计(第四版)谭浩强》
  • 【C语言】C语言视频教程
  • 《郝斌 C 语言自学教程》

文章目录

  • 为什么需要函数
  • 什么叫函数
  • 如何定义函数
  • 函数的分类
  • 注意的问题
  • 常用的系统函数

为什么需要函数

避免重复性操作
有利于程序模块化

什么叫函数

逻辑上 :能够完成特定功能的独立代码块

物理上:

  • 能够接收数据(也可以不接收)
  • 能够对接收的数据进行处理
  • 能够将数据处理的结果返回(也可以不返回)

总结:函数是个工具,它是为了解决大量类似问题而设计的
函数可以当做一个黑匣子

如何定义函数

函数的返回值 函数的名字(函数的形参)
{
函数的执行体
}

1)函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法

2)return 表达式的含义

  • 终止被调函数,向主调函数返回表达式的值
  • 如果表达式为空,则只终止函数,不向被调函数返回任何值
  • break 是用来终止循环和 switch 的,return 是用来终止函数的
    3)函数返回值类型称为函数的类型,因为如果函数名前的返回值类型和函数执行体中的 return 表达式不同的话,则最终
    函数返回值的类型以函数名前的返回值类型为准
#include<stdio.h>int f(){return 10.5;
}int main(){float x = f();printf("%f\n", x);return 0;
}

output

10.000000

函数的分类

有参函数和无参函数
有返回值和无返回值
库函数和用户自定义函数
普通函数和主函数
值传递函数和地址传递函数

一个程序必须有且只能有一个主函数

主函数可以调用普通函数,普通函数不能调用主函数

普通函数可以相互调用

主函数是程序的入口,也是程序的出口

注意的问题

1)函数调用和函数定义的顺序

  • 如果函数调用写在了函数定义的前面,则必须加函数前置声明,
    函数前置声明的作用:

    • 告诉编译器即将可能出现的若干个字母代表的是一个函数
    • 告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况
    • 函数声明是一个语句,末尾必须加分号
    • 对库函数的声明是通过 #include<库函数所在的文件的名字.h> 来实现的

2)形参和实参

个数相同
位置一一对应
数据类型必须相互兼容

#include<stdio.h>int f(int i, int j){return i;
}int main(){float x = f(6.5, 5);printf("%f\n", x);return 0;
}

out

6.000000

3)如何在软件开发中合理的设计函数来解决实际问题

一个函数的功能尽量独立,单一,多学习,多模仿牛人的代码

4)函数是 C 语言的基本单位,类是 java C++ 的基本单位

5)变量的作用域和存储方式

按作用域分

  • 全局变量
    在所有函数外面定义的变量叫全局变量
    使用范围:从定义位置到整个程序结束
#include<stdio.h>void f(void){printf("%d\n", k);return;
}int k = 1000;int main(){printf("%d\n", k);return 0;
}

output

错误   1   error C2065: “k”: 未声明的标识符
  • 局部变量
    在一个函数内部定义的变量或者函数的形参都统称为局部变量
    使用范围:只能在本函数内部使用

【注意】
全局变量与局部变量命名冲突的问题
在一个函数的内部,如果定义的局部变量的名字和全局变量名字一样时,局部变量会屏蔽掉全局变量

#include<stdio.h>int k = 1000;void f(int k){printf("%d\n", k);return;
}int main(){f(8);return 0;
}

output

8

按变量的存储方式
静态变量
自动变量
寄存器变量

常用的系统函数

double sqrt(double x);
int abs(int x);
double fabs(double x)

【C】Function相关推荐

  1. 【译】function.caller 被认为是有害的

    原文地址:function.caller considered harmful 原文作者:Benedikt Meurer 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold ...

  2. 【Python】function、module、Package及import导入方法

    计算机程序开发中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里面,这样,这个文件包含的代码就相对较少,很多编程 ...

  3. 【机器学习】function regularized_cost at 0x000001E9244B5A60>报错

    项目场景: 在进行机器学习代码练习时,出现了<function regularized_cost at 0x000001E9244B5A60>报错 问题描述 print 输出 regula ...

  4. 【Django】‘function‘ object has no attribute ‘subjects‘报错的解决

    项目场景 创建了一个新文件夹 myapp ,用于保存新功能模块下实现功能的代码文件 views.py . 问题描述 运行项目时,报错 'function' object has no attribut ...

  5. 【JS】Function 函数简解

    文章目录 一.函数的概念 二.函数定义和调用 1.函数的定义 1.1.声明式函数 1.2.赋值式函数 2.函数的调用 2.1.函数调用方法 2.2.调用上的区别 三.函数的参数 1. 函数的参数 1. ...

  6. 【ZJOI2009】【BZOJ1432】Function(找规律)

    problem n条直线,没有任意三条及以上直线相交于同一点. 求从下往上第k层(具体见原题)最少能被划分成多少条线段. solution n条边两两相交可以截出n^2段线段(自己画画就出来了QAQ) ...

  7. 【JavaSE】JDK新特性(二)————接口新特性,函数式接口(Suppier,Comsumer,Predicate,Function)

    文章目录 1.接口新特性 1.1 接口组成更新概述 1.2 接口中的默认方法 1.3 接口中的静态方法 1.4 接口中的私有方法 2. 函数式接口 2.1 函数式接口概述 2.2 函数式接口作为方法的 ...

  8. DOM-6 【兼容】读写样式属性、操作伪元素、运动元素初探

    规范 <style type="text/css"></style> <script type="text/javascript" ...

  9. 【JavaScript】浏览器

    No1: [window]全局作用域,而且表示浏览器窗口 innerWidth和innerHeight属性,可以获取浏览器窗口的内部宽度和高度.内部宽高是指除去菜单栏.工具栏.边框等占位元素后,用于显 ...

最新文章

  1. LambdaMART简介——基于Ranklib源码(一 lambda计算)
  2. 笔记-信息系统安全管理-安全审计
  3. java 洗牌_java数组之完美洗牌算法
  4. Hql 中 dao 层 以及daoimpl 层的代码,让mvc 模式更直观简洁
  5. qq数据泄露_如何保护企业移动端的数据安全?
  6. 如何设置单词第一个字母大写_大写一行中每个单词的第一个和最后一个字母
  7. 中间件配置文件-redis
  8. lua中variables和table
  9. qdtuling.xyz 7.10
  10. python调用java接口或者类_python如何调用java类
  11. 二分类确定画出roc曲线,以及基于roc曲线获得最佳划分阈值
  12. TR069服务器配置DHCP/IP/PING/Tracert/HTTP/PPPoE等仿真诊断模板及IPWAN和PPPoE WAN模板创建
  13. Unity Editor Window Zooming
  14. android 9 8 对比,iPhone 8plus在安卓机中相当于什么层次?看看它与小米9的对比吧...
  15. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day23】—— 算法1
  16. python 将列表按指定长度拆分
  17. 牛客OR36 链表的回文结构
  18. MySql安装成功后没有my.ini文件怎么办?
  19. mkv文件怎么转换成mp4?
  20. 【技巧】美国5大免税州邮编

热门文章

  1. EPICS Archiver Appliance在Centos7的定制部署
  2. oc中不同方式实现锁
  3. Brightcove发布新的移动应用以简化员工视频沟通
  4. 使用最新 ALSA 驱动解决 UBUNTU LINUX INTEL 集成声卡问题
  5. Fedora17硬盘安装
  6. 4399曾经最火的黄金矿工小游戏,用Java语言2小时学会
  7. java replace 特殊字符_java replaceall 用法:处理特殊字符
  8. 把matlab移动到另一个盘,乾坤大挪移,教你如何将程序从一个硬盘移到另一个硬盘...
  9. [Android实例] 两边都能滑动的数据间隔选择SpaceBar
  10. 计算机考试操作考试题库,2017计算机信息技术操作考试题库