此章讲的主要是自定义函数

函数的定义


形式:

函数类型 函数名 (形参列表){  函数体}

可以把函数看成个加工厂,形式参数是原料,返回值是加工好的成品

举个例子具体化一下

eg.

int compare(int a, int b){  if(a>=b)    return a;  if(a<b)    return b;}

不难看出,本自定义函数的作用是对比两个整型,并返回较大的数

把原料a,b送到函数里加工,返回“较大数”这个成品

tips:

  1. 函数类型对应的是返回值的数据类型

    此例中,返回值是a或者b,为整型

  2. 函数的定义一般放在总函数main(){}的前面或者后面,即外部,最后会放总例

  3. 不要漏了形式参数的定义,并且要分别定义,上例中int a,b就是错误的

  4. 当函数类型为int 或char时,可以省略,此例子中就可以省略compare前的int

  5. return 语句为返回语句,可以类比为加工好的成品,此例中“成品”为较大数

  6. 没有返回值时,函数类型为void

eg.

void display(int x)//无返回值{  printf("较大数为%d",x);}

函数的声明


形式:

函数类型 函数名(形参列表);

tips:

  1. 与函数定义的第一行一模一样,结尾加个分号

  2. 函数定义若在主函数前,不需要函数声明;

  3. 函数定义若在主函数后,主函数内一定要函数声明;(除非你不用这个函数,那多半是不可能的,函数都定义了就会用啊)

  4. 别忘记分号!

具体化举例:

eg1:

#include<stdio.h>int compare(int a, int b){  if(a>=b)    return a;  if(a<b)    return b;}void display(int x)//无返回值{  printf("较大数为%d",x);}main(){  ...//调用部分,无需函数声明}

eg2:

#include<stdio.h>main(){  int compare(int a, int b);//必须有函数声明!注意分号  void display(int x);//必须有函数声明!注意分号  ...//调用部分}int compare(int a, int b){  if(a>=b)    return a;  if(a<b)    return b;}void display(int x)//无返回值{  printf("较大数为%d",x);}

函数的调用


形式:

函数名 (实参列表);

tips:

  1. 实参必须与形参数量相同,顺序相同,一一对应。

  2. 当有返回值的时候要有变量承接返回值。

  3. 调用的时候不用加数据类型。

  4. 形参和实参重名没有关系,分别独立

  5. 调用函数的时候不要写函数类型

直接上总例,调用部分标注在总例中

type1:

#include<stdio.h>int compare(int a, int b){  if(a>=b)    return a;  if(a<b)    return b;}void display(int x)//无返回值{  printf("较大数为%d",x);}main(){  int m,n,x;//同种数据类型的变量可以同时申明  scanf("%d",&m);  scanf("%d",&n);  x=compare(m,n);//调用compare函数,用变量x承接函数返回值  display(x);//调用display函数,没有返回值,不需要变量承接}

type2:(就是函数定义位置不同的区别)

#include<stdio.h>main(){  int m,n,x,compare(int a, int b);//同种数据类型的变量和函数可以同时申明  void display(int x);//函数定义在主函数后,此处需要进行函数声明  scanf("%d",&m);  scanf("%d",&n);  x=compare(m,n);//调用compare函数,用变量x承接函数返回值  display(x);//调用display函数,没有返回值,不需要变量承接}int compare(int a, int b){  if(a>=b)    return a;  if(a<b)    return b;}void display(int x)//无返回值{  printf("较大数为%d",x);}

tips:

  1. 函数可以嵌套调用,但不可以嵌套定义。

  2. 与循环、分支结构相同,函数可以进行嵌套,即函数内部调用函数。

  3. 函数调用自身往往称之为函数的递归

故上例也可以改成这样:(结果相同,差别是两个数比较的最大值不会被保存)

#include<stdio.h>int compare(int a, int b){  if(a>=b)    return a;  if(a<b)    return b;}void display(int a, int b)//无返回值{  int x;//要用到变量x承接compare返回值,此时x不再是形式参数,需要定义  x=compare(a,b);//函数的嵌套调用  printf("较大数为%d",x);}main(){  int m,n,x;//同种数据类型的变量可以同时申明  scanf("%d",&m);  scanf("%d",&n);  display(m,n);//调用display函数,没有返回值,不需要变量承接}

传值V.S.传地址


传值 不改变实参
传地址 改变实参

记住以下例子

传值:

#include <stdio.h>void swap(int a, int b)//自定义函数{  int c;  c=a;a=b;b=c;//调换两个数的一般算法}main(){  int m=2,n=3;  printf("原来的数:%d,%d\n",m,n);  swap(m,n);//调用自定义函数  printf("调用后的数:%d,%d\n",m,n);}

会发现m,n的值并没有变,这就是值传递


传地址:

#include <stdio.h>void swap(int *a, int *b)//自定义函数,“*”表示取内容,此处定义地址,形参对应地址变量{  int c;  c=*a;*a=*b;*b=c;//调换两个数的一般算法}main(){  int m=2,n=3;  printf("原来的数:%d,%d\n",m,n);  swap(&m,&n);//调用自定义函数,&表示取地址,实参为地址,与形参对应  printf("调用后的数:%d,%d\n",m,n);}

会发现m,n的值交换了,这就是地址传递

这个 值传递和地址传递 的例子为初学者常考点,留意一下


通过简单的举例可以发现,自定义函数能简化主函数部分,并使其结构更简单清晰。

函数的递归等具体算法举例,在第九章后具体化呈现

下一章节:结构体(章节:8/9)


p.s. 

        小红书,知乎等平台搜索知识薪火站(或youzuos),也会上传相应笔记,感谢关注。

        有建议欢迎提出!

C语言零基础速通——函数(7分钟搞懂)相关推荐

  1. C语言零基础入门级 递归+回调+字符串函数+面试题全讲解【系统学习第六天】

    C语言零基础入门级 函数大全+面试题全讲解 [1]C语言->函数入门 [2]C语言->函数的定义 [3]C语言-> 函数实参与形参 [4]C语言->函数调用的流程 [5]C语言 ...

  2. C语言 const 修饰函数参数 - C语言零基础入门教程

    C语言 const 修饰函数参数 - C语言零基础入门教程 目录 一.const 简介 1.const 修饰变量 2.const 修饰指针 3.const 修饰在函数名前面 4.const 修饰在函数 ...

  3. c语言int转字符串_C语言零基础入门-指针-05

    C语言零基础入门-指针-05 本节要点: 1,字符指针. 2,字符串指针. 3,指针的参数传递 4,多重指针 01. 字符指针 这里的定义与前面的基本一样,所谓的字符指针就是这个指针指向的是一个字符型 ...

  4. C语言零基础入门级数据类型+运算符+控制流+ASCII 码表+面试题【系统学习第二天】

    C语言零基础入门级数据类型+运算符+控制流 第一项 C语言->数据类型全讲解上 [1]整型int [2]整型修饰符short.long.unsigned [3]符号位 [4]格式控制符%d+%h ...

  5. 【C语言零基础全套课件】

    [C语言零基础全套课件] [文章列表] [文章列表] C语言最基础的知识图文 vsCode环境安装及插件安装 vsCode安装与使用[图文并茂] C语言零基础入门级学习程序框架[系统学习第一天] C语 ...

  6. C语言零基础入门:孙海洋-C语言程序设计-清华大学出版社

    C语言零基础自学入门:**<C语言程序设计>-孙海洋-清华大学出版社 为方便同学们学习,在中国大学慕课网 免费提供全套视频讲解. 讲解清晰易懂,便于自学,几乎每个知识点均有对应例程,注重程 ...

  7. C语言零基础入门——1.基础知识与环境搭建。

    C语言零基础入门--1.基础知识与环境搭建. 好了.终于迎来了第一篇文章,这篇文章要做的事情非常简单,主要有三个事情 ​ 第一:C语言的介绍. ​ 第二:计算机的基础知识. ​ 第三:C语言的环境安装 ...

  8. rust放置木箱转向_[易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]...

    [易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates] 实用知识 装箱crates 我们今天来讲讲装箱技术crates. 什么是crates? 英语翻译是: 英 [kre ...

  9. c语言零基础自学,c语言零基础入门 该如何学习

    原标题:c语言零基础入门 该如何学习 ​零基础学习C语言该从哪里开始学习呢?在学习之前你可以先问自己,为什么我要学C语言?是为了应付考试,还是为了应聘,还是为了提高自己的编程能力.如果你以后想要长期致 ...

最新文章

  1. 通过Java代码实现图片的放大和缩小
  2. php ajax操作数据库,php + ajax 实现的写入数据库操作简单示例
  3. python 在互联网应用是如此强大
  4. python输出字符串的后两位_Python字符串三种格式化输出
  5. SpringCloud Hystrix的超时时间配置以及监控平台搭建
  6. C++ 类的定义、作用域及大小计算,限定访问符,this指针
  7. JSR-303 数据校验学习
  8. 个人生活的量化分析(三):考研英语初探
  9. 人体运动生物力学之人体步态分析
  10. 安卓apk反编译教程
  11. 针对3-Des的Merkle Hellman攻击
  12. 基于asp.net的排球赛事网站设计与实现
  13. Altium Designer --> 电气电路
  14. Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕2
  15. 低秩矩阵RPCA MATLAB,低秩矩阵分解
  16. 当用户用input() 函数输入演员名字在屏幕 上打印出xx出演电影xx
  17. 铨顺宏RFID:电子汽车车牌系统具有RFID识别功能
  18. 华为手机如何用微信与电脑连接服务器,华为手机也能连接苹果电脑,只需这样做...
  19. firebox 浏览器查看cookie的方法
  20. [HPM] Error occurred while trying to proxy request /login/account from localhost:8000 to localhost:8

热门文章

  1. 在c程序语言中aph,C 语言试题
  2. python与炒股_Python量化炒股入门与实战技巧
  3. VPS国内各网点一键测试脚本
  4. 常用linux命令(摘自他人笔记)
  5. 涉密计算机保密管理ppt,2016年保密工作计划书ppt
  6. 【联邦学习实战】基于同态加密和差分隐私混合加密机制的FedAvg
  7. GitHub里的灭霸脚本,竟都还不是最奇葩的?
  8. 几个好用Maven 镜像仓库地址
  9. 黑马程序员——OC基础05—Foundation框架
  10. jenkins中maven的安装及配置,如何在jenkins中创建maven任务。