c语言基础篇D

D1.函数概述

  1. 一个c程序可以由一个主函数和若干个其他函数构成,一个较大的程序可分为若干个程序模块,每一个模块用来实现一个特定的功能。在高级语言中用子程序实现模块的功能。子函数由函数来完成
  2. 一个c程序由一个或多个程序模块构成,每一个程序模块作为一个源程序文件。对于较大的程序。通常将程序内容分别放在若干个源文件中,再有若干源程序文件组成一个c程序。
  3. 一个源程序文件可以为多个c程序公用
  4. 一个源程序文件由一个或多个函数以及其他有关内容(命令行,数据定义)组成。一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位进行编译的。而不是以函数为单位编译的。
  5. c程序的执行是从main函数开始的,如果在main函数中调用其它函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行
  6. 所有函数都是平行的,在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一函数,即函数不能嵌套定义。函数间可以互相调用,但不能调用main函数。mian函数是系统调用

D2.从用户角度看两种函数

  1. 标准函数
  • 即库函数。这是由系统提供的,用户不必自己定义这些函数,可以直接使用它们。
  • 不同的c系统提供的库函数的数量和功能会有些不同,但许多基本的函数是共同的
  • c编译系统提供的库函数,只需用#include命令把有关的头文件包含到本文件模块中即可
  1. 用户自己定义的函数。用以解决用户的专门需要

D3.从函数的形式看两种函数

  1. 无参函数
  • 无参函数一般用来执行指定的一组操作,在调用无参函数时,主调函数不向被调用函数传递数据
  1. 有参函数
  • 主调函数在调用被调用函数时,通过参数向被调用函数传递数据

D4,函数的定义

  1. 定义的内容
  • 指定函数的名字
  • 指定函数的类型,函数值的类型
  • 指定函数的参数名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要
  • 指定函数的功能,应当完成什么操作,做什么,在函数体中解决
    • c语言规定,在函数中用到的所有函数,必须“先定义,后使用
  1. 定义无参函数
  • 类型标识符 函数名()
  • {
  • 声明部分
  • 语句部分
  • }
  1. 定义有参函数
  • 类型标识符 函数名(形式有参列表)
  • {
  • 声明部分
  • 语句部分
  • }
  1. 定义空函数
  • 类型标识符 函数名()
  • {}

D5.函数的参数

  1. 形式参数
  • 函数名后括弧中的变量名称为形式参数 (形参)
  1. 实际参数
  • 主调函数中调用一个函数时,函数名后面括弧的参数(实参)
  1. 关于形参和实参的说明
  • 在定义函数中指定的形参,在未出现函数调用时,它们并不占用内存中的存储单元。只有在发生函数调用时,函数max中形参才被分配内存单元。在调用解释后,形参所占的内存单元也被释放
  • 实参可以是常量,变量或表达式
  • 在被定义的函数中,必须指定形参的类型
  • 实参和形参的类型应相同或赋值兼容
  • 实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用解释后,形参单元被释放,实参单元仍保留并维持原值

D6.函数的返回值

  • 类型表示符:函数返回值的数据类型
  • 函数返回值:return后面的括弧中的值作为函数待会的值(函数返回值)
    • 说明
      • 函数的返回值是通过函数中的return语句获得的
      • 函数的返回值应当属于某一个确定的类型,在定义函数时指定函数返回值的类型
      • 在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致(如果不一致,则以函数类型为准)
      • 对于不带回值的函数,应当用“void”定义函数为“无类型”(空类型)。此时在函数体要么没有return语句,要么return语句为0

D7.函数调用的一般形式

  • 函数调用的一般形式:函数名(实参表列)
    • 说明
      • 如果调用无参函数,则“实参表列”可以,没有,但括弧不能省略
      • 如果实参表列包含多个实参,则各参数间用逗号隔开。实参与形参的个数应相等,顺序对应,类型应匹配
  • 函数参数
    • 函数调用作为一个函数的实参
  • 函数原型的一般形式
    • 函数类型 函数名(参数类型1,参数类型2.)
    • 函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2)
      • 注意
      • 函数的“定义”和“声明”不是一回事
      • 函数的定义是指对函数功能的确立,包括指定函数名,函数值类型,形参及其类型,函数体等,它是一个完整的,独立的函数单位
      • 函数的声明的作用则是把函数的名字,函数类型以及形参的类型,个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查

D8.数组参数与数组

  1. 数组元素作函数参数
  • 数组元素可以作为函数的实参,与用变量作实参一样,是单向传递,“值传送”
  1. 数组名作函数参数
  • 可以用数组名作函数参数,此时并不是将该数组中全部元素传递给锁对应的形参,由于数组名代表数组的首地址,只是将数组的首元素的地址传递给所对应的形参,对应的形参应当是数组名或指针变量
    • 说明
      • 程序中用数组名作函数实参,函数average的形参也定义数组。
    • 注意
      • 主调函数和被调用函数分别定义数组,array是形参数组名,score是实参数组名,分别在所在函数中定义,不只是一方定义
      • 实参数组与形参数组类型应一直(float型)
      • 用数组作为函数参数,在调用函数时并不另外开辟一个存放形参数组的空间,这点和用变量作函数参数不同的,数组名代表数组的首元素的地址,用数组名作函数实参时,只是将实参数组的首元素的地址传给形参数组
  1. 变量的作用域
  • 局部变量
    • 在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些函数
    • 主函数中定义的变量只在主函数中有效,而不因为在主函数中定义而在整个文件或程序中有效
    • 主函数也不能使用其他函数中定义的变量
    • 不同函数中可以使用相同名字的变量,它们代表不同的对象,互不干扰、
    • 形式参数也是局部变量
    • 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,也称为“程序块”
  • 全局变量
    • 在函数外定义的变量称为外部变量,外部变量是全局变量(全程变量)。全局变量可以为本温江中其他函数所共用。它的有效范围从定义变量的位置开始到本源文件结束
      • 注意
        • 全局变量在程序的全部执行过程中都占用存储单元,而不是仅需要时才开辟单元
        • 使用全局变量过多,会降低程序的清晰性。在各个函数执行都可能改变外部变量的值
        • 它降低函数的通用性,因为函数在执行时要依赖于其所在的外部变量。
  1. 静态变量
  • 静态局部变量
    • 当函数中的局部变量的值在函数调用结束后不消失而保留原值时,该变量称为静态局部变量,用关键字static进行声明
      • 静态局部变量属于静态存储类别,在静态存储区内分配存单元。在程序整个运行期间都不释放
      • 对静态局部碧昂量是在编译时赋初值的。既只赋初值一次。
      • 如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)
      • 虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust 1.安装

安装 下载地址:https://www.rust-lang.org/learn/get-started rust安装有一个先决条件:cpp的编译器 在windows下进行Rust开发,编译器有两个选择要么是msvc,要么是MinGW(GNU)。这是两个是不兼容的编译器&a…

SpringBoot的事务注解

SpringBoot的事务注解 在Spring Boot应用中,事务管理是一个关键的部分,尤其是当涉及到数据库操作时。Spring Boot提供了强大的事务管理支持,使得开发人员可以通过简单的注解来控制事务的边界和行为。本文将介绍如何在Spring Boot中使用事务注…

requests库的常用方法

之前都是用jmeter进行接口测试然后进行持续性集成,之前也写过用jmeter来请求各种类型的接口,今天来学习下如何使用pythonrequests对各种接口发起请求并断言。 1.接口类型 测试项目的ip和端口如下: host "ip" port "8080&q…

传感器技术

传感器技术 传感器概述传感器简介传感器的特性线性度灵敏度迟滞重复性传感器的动态特性 步进电动机步进电机的工作原理 传感器概述 传感器简介 传感器:能够感受被测量并按照一定规律转换成可用输出信号的器件或装置。 敏感元件:传感器中能直接感受或响…

Shell脚本要点和难点以及具体应用和优缺点介绍

Shell 脚本是一种用于自动化任务和简化常见系统命令的脚本语言,通常运行在 Unix 或 Unix-like 的系统上,如 Linux 和 macOS。Shell 脚本可以直接在命令行中执行,也可以保存为文件并通过 bash、sh、zsh 等 shell 解释器来执行。 以下是一个简单的 Shell 脚本示例,它演示了如…

WebSphere面试题精选和参考答案(3万字长文)

目录 什么是WebSphere? WebSphere的主要特点是什么? WebSphere支持哪些编程语言? WebSphere的组件有哪些? 什么是WebSphere Application Server(WAS)? 您如何部署应用程序到WebSphere? 什么是热部署? 什么是节点同步? 如何在不停止DMGR的情况下进行WAS配置备…

Nginx之核心配置指令1

作为一款高性能的HTTP服务器软件,Nginx的核心 功能就是应对HTTP请求的处理。由于具体硬件、操作 系统及应用场景的不同,需要Nginx在对HTTP请求的处 理方法上进行不同的调整,为了应对这些差异,Nginx 提供了多种配置指令&#xff0c…

Nodejs 第七十六章(MQ进阶)

MQ介绍和基本使用在上一章介绍过了,不再重复 消息:在RabbitMQ中,消息是传递的基本单元。它由消息体和可选的属性组成 生产者Producer:生产者是消息的发送方,它将消息发送到RabbitMQ的交换器(Exchange&…

10款堪称神器的宝藏软件,相见恨晚

今天给大家带来10款堪称神器的宝藏软件,每一个都非常好用,让你直呼相见恨晚。 1、知犀思维导图 知犀思维导图是大家组织信息、梳理思维的重要利器,它可以帮助我们以图形化的方式呈现思维过程,让整体思路变得清晰直观。通过使用知…

【神经网络】资源

神经网络是一种模拟人脑神经元结构的计算模型,广泛应用于机器学习和深度学习领域。以下是一些关于神经网络的资源,可以帮助你从基础到高级逐步掌握相关知识: 入门教程: 《神经网络教程:从原理到实践的全面解析》提供…

3 数据类型、运算符与表达式-3.5 字符型数据-3.5.2 转义字符

3.5.2 转义字符 #include <stdio.h>main() {int a, b, c;a 5;b 6;c 7;printf("ab c\tde\rf\n");printf("hijk\tL\bM\n");return 0; }

架构师如何运用情景领导力

架构师应用情景领导力意味着根据团队成员的成熟度和项目的具体情况来调整自己的领导风格。以下是架构师如何使用情景领导力的一些方法&#xff1a; 评估团队成员的成熟度&#xff1a;架构师需要评估团队成员在技术和专业领域的成熟度&#xff0c;包括他们的专业技能、经验、解…

花键轴类零件加工方法有哪些?

花键轴零件的加工方法 一辆普通中型卡车上约含 30 个花键轴零件, 通常用在离合器、变速器、传动轴总成、差速器、转向总成等位置。 花键轴零件的加工工艺是传统的切削加工和塑形成形加工两种。传统工艺如下的8个主要工序&#xff1a; 下料→锻造毛坯→毛坯加工→外花键加工…

34、掌握线上系统:jmap和jhat带你深入了解对象分布

34.1、前文总结 在上一篇文章中,我们向大家介绍了一个在日常工作中的实用工具jstat。通过使用jstat,我们可以非常轻松便捷地了解线上系统的运行状况,包括新对象增速、Young GC触发频率及耗时,以及对象进入老年代的增速和Full GC触发频率及耗时。这些信息有助于我们全面掌握…

【C语言】青蛙跳台阶问题 - 递归算法(一种思路,针对三种不同的情况)

文章目录 1. 前言2. 题目和分析2.1 代码实现2.2 反思 (重点) 3.题目二&#xff08;变式&#xff09;3.1 分析3.2 代码实现 4. 题目三&#xff08;变式&#xff09;4.1 分析4.2 代码实现 1. 前言 相信大家看到青蛙跳台阶问题时&#xff0c;第一时间就会想到递归。那你知道为什么…

SwiftUI中结合使用Timer和onReceive

SwiftUI提供了一种现代化的方式来构建用户界面&#xff0c;其中包括对时间驱动的事件的响应。在许多应用中&#xff0c;可能需要根据时间间隔执行某些操作&#xff0c;例如更新界面或触发事件。SwiftUI通过结合使用Timer和 onReceive 来实现这一功能&#xff0c;使得处理时间相…

【免杀】C2远控-Loader加载器-动态API调用

目录 创建后门程序站在杀毒程序立场上对后门进行分析例&#xff1a;动态调用VirtualProtect函数 作用:绕过杀毒对导入表的检测定性 创建后门程序 VS新建项目 回调函数加载Loader #include <Windows.h>unsigned char shellcode[] "";void CallBack() {void* p…

FlashBrowser

本例&#xff1a;windows10 下载FlashBrowser 解决flash失效问题&#xff0c;更换浏览器 https://www.flash.cn/ 下载FlashBrowser浏览器

Redis的缓存击穿、缓存穿透和缓存雪崩是什么?怎么预防?

Redis的缓存击穿、缓存穿透和缓存雪崩是什么&#xff1f;怎么预防&#xff1f; 前言缓存击穿定义解决思路实现加锁设置过期时间Lua脚本刷新锁 缓存穿透定义实现 缓存雪崩定义解决思路 总结 前言 最近在CSDN上看到了一篇博客&#xff0c;Redis缓存击穿、雪崩、穿透&#xff01;…

深入理解Vue3.js响应式系统基础逻辑

如果您觉得这篇文章有帮助的话&#xff01;给个点赞和评论支持下吧&#xff0c;感谢~ 作者&#xff1a;前端小王hs 阿里云社区博客专家/清华大学出版社签约作者/csdn百万访问前端博主/B站千粉前端up主 此篇文章是博主于2022年学习《Vue.js设计与实现》时的笔记整理而来 书籍&a…