C语言基础:从文件概念到输入输出函数
目录一、C语言中文件的相关概念二、C语言中的变量三、C语言中的常量四、定义常量五、进制转换六、输入输出函数一、C语言中文件的相关概念在C语言中分为三种文件源文件.c、头文件.h和库文件系统中。源文件用来编写函数的定义、变量的定义。现阶段写源文件即可头文件一般用来包含其他头文件、数据类型的声明和函数的声明、预处理指令的编写。库文件存在于系统当中库函数的定义存放在库文件当中是前辈写好了的一些功能完善的代码。函数是实现特定功能的一段代码后续可以将这段代码通过函数调用的方式重复使用。主要的核心作用是提高代码的复用率。函数主要的内容就是一系列的语句执行一些特定的功能。一般一个函数执行到 return 语句停止如果没有 return 语句就到函数体执行完成就结束。一个工程中有且只能有一个 main 函数main 函数结束整个工程就结束了。内存宏观上来说就是内存条属于电子设备。微观上看就是一系列存储单元。内存一般只能由特殊的电路进行操作程序员只能通过计算机 CPU 去操作内存。一般内存的最小存储单位是字节Byte最小的存储单元是二进制位bit一个 bit 能存储几个数据一般就是两个数据1、0。一个字节等于 8 个位8bit可以存储 256 个数据0 ~ 255。一般在内存中每一个存储单位一个字节都有自己的内存地址即每一个字节都对应着一个地址。8bit 1Byte 1024 Byte 1 K Byte (2 ^ 10) 1024 K Byte 1 M Byte 1024 M Byte 1 G Byte二、C语言中的变量变量实际上就是内存中的一段空间。C语言中定义变量必须明确变量的数据类型int、float、double、char不同类型的数据存储空间大小和存储方式不一样。程序员就可以通过变量名去操作变量对应的那一段内存空间计算机一般通过变量对应的内存地址去操作。2.1 变量的定义形式auto typename varName;// auto 可以有也可以没有如果没有默认存储在自动存储区域。意义定义了一个 typename 类型的变量变量名是 varName告诉编译器分配多大内存空间多少个字节告诉编译器在哪个位置定义。比如auto int num;、static int var;前者存储在自动存储区域后者存储在静态存储区域。目前 auto 和 static 可以不使用默认就是 auto 类型。int var;如果这个变量定义在函数的内部一般就是默认存储在自动存储区域这个变量只能在当前函数中使用如果在函数外部定义可以在整个文件中使用。int 类型的变量表示当前变量是一个整型变量在C语言中 int 类型变量一般占用 4 个 Byte即 32 个位。每一个字节都有对应的地址编号var获取变量的地址获取的是最低字节的地址。变量名属于C语言标识符的一种标识符一般有函数名、变量名等。C语言中标识符的命名规则由数字、字母、下划线和 $ 符号组成。不能由数字开头。严格区分大小写。不能和关键字重名int、float、double、char 等。2.2 变量的初始化在C语言中变量的初始化一般指在定义变量时为变量赋一个初值。变量的初始化可以在定义的同时进行int num 10;也可以在定义变量之后进行int var; var 20;2.3 变量不初始化在C语言中如果变量没有初始化相当于内存没有明确分配数据那么变量的值由变量的类型和变量存储位置决定。对于函数内部的变量局部变量它的值是一个垃圾值是上一次程序使用这块内存残留下的值。对于函数外部定义的变量全局变量没有初始化时其数据是 0 值。当局部变量和全局变量同名时此时局部变量可以起作用时就优先使用局部变量。在 VS2022 中局部变量如果没有初始化不可以直接使用必须明确赋值。2.4 变量的声明变量的声明主要是告诉编译器这个变量存在告诉编译器变量存储类型和存储位置在编译时不需要知道变量的实体只需要知道这个变量存在于这个工程中即可。全局变量的定义在整个工程有效所有的文件的函数都可以使用全局变量在使用之前需要进行声明。格式extern typeName var;注意不能使用赋值号进行赋值操作。int num 10; extern int num;局部变量的定义只在一个函数中生效所以其作用范围就在定义变量处到函数结束处。局部变量定义可以直接理解为声明。注意声明可以有多次定义只能有一次。三、C语言中的常量常量一般在整个程序运行期间它的值是固定的不会随程序运行而改变存储在常量区/字面量区。这些固定的值一般也是有数据类型的。常量可以是任意的一个整数1、2、3、99也可以是浮点数1.1、2.2、3.14字符常量a、b、c、\n一般一个单引号不能放多个普通字符字符串常量hello world\n、xyd。3.1 整型常量可以是十六进制整数、可以是八进制整数也可以是十进制整数。十进制不需要任何说明普通的整数。实例12、13、100、99。特殊情况12L表示长整型20uunsigned 表示无符号类型。八进制一般使用 0 作为前缀如 0101、067。十六进制一般使用 0x 作为前缀如 0x64、0x41。二进制一般使用 0b 作为前缀如 0b1010、0b0101。C99 之后的版本支持二进制的写法实例1、212 2、215u 3、0xFeel合法 4、123uu不合法3.2 浮点数常量浮点数主要分为整数部分和小数部分。不仅可以使用整数.小数表示方式还可以使用指数形式进行表示。使用小数方式进行表示必须包含整数部分或小数部分和小数点。浮点数常量一般默认是 double 类型此时可以加上 f 后缀表示其是一个 float 类型。指数表示通常需要使用 e 或 E当使用指数表示法时必须包含 e 配合一个整数表示 10 的 n 次方。3.3 字符类型常量一般使用单引号括起来的就是字符常量例如x 可以存储在 char 类型的变量里。字符常量可以是一个普通字符也可以是一个特殊字符即转义字符。3.4 字符串常量一般使用一对双引号括起来表示一串字符通常使用字符数组进行存储。打印字符串一般使用 printf 函数配合 %s。四、定义常量#define预处理器将宏标识符替换成一个指定的内容以此实现常量的定义。# 开头的一般表示一种预处理指令是不会参与运算的在预处理阶段就会被宏的内容替换掉。const是C语言的一个关键字可以将一个变量修饰成一个常量后续就不可以通过变量名对变量进行修改。一般使用 const 定义通常需要进行初始化否则 const 变量就没有任何意义。五、进制转换进制转换是C语言学习中的一个基础知识点主要涉及十进制、二进制、八进制和十六进制之间的相互转换。理解进制转换有助于深入理解数据在计算机中的存储方式以及位运算等底层操作。六、输入输出函数6.1 标准输入和标准输出C语言一般使用 printf() 函数进行一些格式化的输出将不同的数据类型按照字符串的格式进行输出输入一般使用 scanf() 进行输入。这两个函数都属于 stdio.h在使用之前需要 #include stdio.h。输入是从标准输入 stdin键盘进行获取数据的流向是从键盘到内存输出是从内存获取数据输出到屏幕stdout数据的流向从内存到屏幕。标准 IO 的库函数一般都有缓冲区使 scanf 函数和 printf 都有一些特性。6.2 字符串一般以双引号括起来的就是字符串比如 hello\tworld\n这就是一个字符串。其中有一些可见字符还有一些是转义字符最后一个字符一定是空字符 \0所有对字符串的操作都是需要根据空字符进行判断。6.3 printf() 函数print打印fformat 格式。格式化的将数据打印到 stdout 上即屏幕。int num 10; printf(num:%d, num);第一个参数一般是一个字符串大多数字符都原样输出有一些转义字符有自己特殊的含义格式控制符需要后面的可变参数进行替换有多少个格式控制符就需要有多少个可变参数。当格式控制符和后续的可变参数不对应时通常会发生一些不可预知的结果。6.4 scanf() 函数scan扫描fformat。从 stdin键盘获取输入只有获取到了正确输入或者输入错误函数才会结束会产生一个阻塞。整型变量的输入int num; scanf(%d, num);%d 将输入以十进制格式理解将数据赋值给 num 对应的内存。6.5 scanf 函数输入字符串字符串在C语言中会经常使用C语言的标准库为程序员提供一系列字符串处理函数。大多数情况下字符串都是用字符数组存储的需要保证字符数组的大小大于等于字符串的大小。char str[20] Welcom Xyd!!; // 字符数组是可以存储20个字符当前这个字符串有12个字符字符串的输出函数通常可以使用 printf() 进行输出比如 printf(hello world); 或者 printf(%s, str);需要注意的是字符串的输入可以使用 scanf 函数进行输入通常对字符数组进行输入比如char str1[30]; scanf(%s, str1); // 后面填入一个字符数组的名字即可字符数组名就是一个地址

相关新闻

基于Zynq的FPGA开发:Vitis工程搭建与UART/GPIO实战

基于Zynq的FPGA开发:Vitis工程搭建与UART/GPIO实战

从近似0基础开始FPGA开发 -- part.5 Vitis工程搭建(Uart及GPIO)前几篇我们把Vivado里的硬件工程搭了起来,Block Design里也把Zynq PS核配好,并且导出了xsa硬件描述文件。但说实话,到这一步,很多刚开始接触Z…

2026/9/4 14:06:55 阅读更多 →
linux系统操作

linux系统操作

含义:查看当前时间 date 含义:查看系统盘磁盘空间占用大小 df -h 含义:端口监听信息查看 netstat -lntp netstat -lntp | grep 80 含义:查看哪个进程在监听80端口 netstat -lntp | grep nginx 含义:查看nginx监听的…

2026/9/4 14:06:55 阅读更多 →
LazyVim 断点调试完全指南:两行配置接入 Neovim DAP

LazyVim 断点调试完全指南:两行配置接入 Neovim DAP

LazyVim 断点调试完全指南:两行配置接入 Neovim DAP 【免费下载链接】LazyVim Neovim config for the lazy 项目地址: https://gitcode.com/GitHub_Trending/la/LazyVim 你改完一段 Lua 配置,重载后发现输出不对:某个变量中途变成了 n…

2026/9/4 14:06:55 阅读更多 →

最新新闻

256K上下文+MoE架构:Qwen3-Next-80B如何重塑开源大模型效率标杆

256K上下文+MoE架构:Qwen3-Next-80B如何重塑开源大模型效率标杆

256K上下文MoE架构:Qwen3-Next-80B如何重塑开源大模型效率标杆 你还在为处理超长文档时频繁截断上下文而烦恼?还在为大模型推理成本居高不下而头疼?2025年9月15日,阿里云正式发布Qwen3-Next-80B-A3B-Instruct大模型,以…

2026/9/4 14:57:22 阅读更多 →
51单片机定时闹钟系统设计:从仿真到实物的嵌入式开发实践

51单片机定时闹钟系统设计:从仿真到实物的嵌入式开发实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 14:57:22 阅读更多 →
生产异常闭环Agent:从异常识别到根因分析与整改跟踪

生产异常闭环Agent:从异常识别到根因分析与整改跟踪

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 14:57:22 阅读更多 →
基于STM32与云平台的智能窗帘系统全栈开发实战

基于STM32与云平台的智能窗帘系统全栈开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 14:57:22 阅读更多 →
iTerm2 低饱和度护眼主题:3 种场景、两步装好的终端配色方案

iTerm2 低饱和度护眼主题:3 种场景、两步装好的终端配色方案

iTerm2 低饱和度护眼主题:3 种场景、两步装好的终端配色方案 【免费下载链接】iTerm2-Color-Schemes Over 450 terminal color schemes/themes for iTerm/iTerm2. Includes ports to Terminal, Konsole, PuTTY, Xresources, XRDB, Remmina, Termite, XFCE, Tilda, F…

2026/9/4 14:57:22 阅读更多 →
Vision Pro玩转SteamVR:KRVR串流方案全解析与实战指南

Vision Pro玩转SteamVR:KRVR串流方案全解析与实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 14:56:21 阅读更多 →

日新闻

ESP32S2嵌入式收音机全栈开发实战指南

ESP32S2嵌入式收音机全栈开发实战指南

简介:本资源是一个基于ESP32-S2芯片的嵌入式综合实践项目,面向本科毕业设计、课程设计及实训开发人员,聚焦网络收音机与FM收音机双模功能实现,融合ESP-IDF框架、ESP-ADF音频开发库与LVGL图形界面库,具备完整软硬件协同…

2026/9/4 0:00:28 阅读更多 →
WorkBuddy+Python实战:从零搭建商品库存管理系统

WorkBuddy+Python实战:从零搭建商品库存管理系统

最近想自己动手做一个“商品库存管理系统”的人变多了。很多开网店、做小团队ERP选型、或者刚学Python的读者,不是不想用系统,而是被传统开发路径劝退了:要装数据库,要写后端接口,要学前端页面,还要考虑多人…

2026/9/4 0:00:28 阅读更多 →
旅游情感分析:基于Python的垂直场景深度解析

旅游情感分析:基于Python的垂直场景深度解析

简介:本资源是一份面向计算机专业本科生的毕业设计实践项目,聚焦旅游行业真实场景,解决旅游平台对用户评论情感倾向自动识别与管理的需求。系统基于Python 3.9.11与Anaconda环境构建,集成携程、马蜂窝双平台爬虫模块,并…

2026/9/4 0:00:28 阅读更多 →

周新闻

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

2026/9/4 10:54:27 阅读更多 →
数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

2026/9/4 14:20:02 阅读更多 →
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

2026/9/3 4:22:59 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/3 4:17:49 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/3 4:18:56 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/4 9:37:01 阅读更多 →