当前位置: 首页 > news >正文

c语言----函数

前言

欢迎来到我的博客

个人主页:北岭敲键盘的荒漠猫-CSDN博客

 本文主要整理c语言中函数的相关知识点

适合有编程基础的人快速掌握。。。。

函数分类

系统函数:

系统内置的函数,include包含进入之后可以直接使用

用户函数:

用户自定义的函数,自己写。

用户函数定义

语法:

函数返回类型 函数名(类型 参数,类型 参数){

说明部分

语句部分

}

案例演示:

#include <stdio.h>float aver_age(float a, float b);int main()
{float a = 5.6, b = 7.2, re;re = aver_age(a, b);printf("%f", re);
}float aver_age(float a, float b)
{// 这个函数是用来求平均数的float result;result = (a + b) / 2.0;return result;
}

这里定义了一个求平均数的函数。

函数声明

如上案例中,我在main函数上面写了一个

float aver_age(float a, float b);

 因为程序是自上向下执行,我们把函数放在了主函数下面,主函数不知道有这个函数。

我们就需要把这个写到main函数上面,保证能找到这个函数。

(int型返回函数,被调函数在主函数之前定义)可以不去声明。但是有点乱,还是把函数统一声明一下比较得劲。

函数嵌套

描述:就是我们在一个函数中调用另一个函数。

案例:

主函数嵌套调用a函数,a函数调用b函数,b函数输出字幕。

#include <stdio.h>
// 声明函数
void a();
char b();int main(){        // 主函数a(); // 调用函数a
}void a(){b(); // 函数a中调用函数b
}char b(){printf("成功利用a函数调用b函数"); // 函数b输出内容
}

链式访问

描述:就是传参的时候,我们传的是一个函数,把一个函数的结果当做另一个函数的参数。

案例演示:

a函数返回1,当做参数给b,b输出a的返回值。(实际上就是传入个1,输出1)

#include <stdio.h>int main(){  //主函数调用b函数b(a());  //b函数传入a函数的结果
}int a(){     //a函数返回一个1return 1;
}int b(int a){   //b函数输出a函数的内容printf("%d", a);
}

传值传参与传址传参

传值传参:我们复制一份相同数值的变量放到函数中执行。途中这个变量发生了变化并不影响函数外面的原本的参数。

传址传参:我们就是把这个变量传到了这个函数中,它发生的任何改变都是改变的他本身。

案例演示:

传值传参

#include <stdio.h>
int change(int a, int b)
{int s;s = a;a = b;b = s;
}int main(void)
{int a, b;scanf("%d %d", &a, &b);printf("a=%d,b=%d\n", a, b);change(a, b);printf("a=%d,b=%d", a, b);
}

输入结果如下:

可以看到,我们用这个交换a,b数值的函数处理a,b。

但是最后输出的结果并没有改变。

传值传参

#include <stdio.h>
int change(int *a, int *b)
{int s;s = *a;*a = *b;*b = s;
}int main(void)
{int a, b;scanf("%d %d", &a, &b);printf("a=%d,b=%d\n", a, b);change(&a, &b);printf("a=%d,b=%d", a, b);
}

结果展示

可以看到用传址传参给他操作真正的变量。

相关文章:

  • 中间件的概念及示例
  • Android跨进程通信--Binder机制及AIDL是什么?
  • 详解 Cookies 和 WebStorage
  • 软件测试面试题(四)
  • 【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档
  • ffpmeg windows WSl 编译so
  • 【开源】大学生竞赛管理系统 JAVA+Vue+SpringBoot+MySQL
  • leedcode【142】. 环形链表 II——Java解法
  • K8s的常用命令以及yaml文件的创建
  • ABC354学习笔记
  • 基于Arduino IDE的ESP32开发环境搭建
  • PyQt6--Python桌面开发(33.QToolBar工具栏控件)
  • java “错误:编码GBK 的不可映射字符”
  • 云计算和大数据处理
  • 9.1 Go语言入门(环境篇)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 230. Kth Smallest Element in a BST
  • Akka系列(七):Actor持久化之Akka persistence
  • CSS3 变换
  • java8 Stream Pipelines 浅析
  • js操作时间(持续更新)
  • Js基础知识(四) - js运行原理与机制
  • Linux链接文件
  • OSS Web直传 (文件图片)
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 闭包--闭包作用之保存(一)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • ------- 计算机网络基础
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 一些关于Rust在2019年的思考
  • 用Canvas画一棵二叉树
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 《码出高效》学习笔记与书中错误记录
  • MPAndroidChart 教程:Y轴 YAxis
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • (152)时序收敛--->(02)时序收敛二
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (30)数组元素和与数字和的绝对差
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言)球球大作战
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)Linux下编译安装log4cxx
  • .Net 8.0 新的变化
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 材料检测系统崩溃分析
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET 中的轻量级线程安全
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET精简框架的“无法找到资源程序集”异常释疑