C语言基础回顾一:从第一个程序到流程控制
一、C语言常见概念C语言是一门面向过程的编译型语言程序从main函数开始执行经过预处理、编译、汇编、链接四个阶段最终生成可执行文件。理解这个流程是排查编译错误的基础知识——当你看到编译错误时问题出在语法层面看到链接错误时往往是函数声明与定义不匹配或缺少目标文件。一个标准的C程序结构如下头文件包含、全局声明、main函数、其他函数定义。main函数的返回值表示程序的退出状态0 代表正常结束非0值通常表示发生了异常。虽然现代编译器对省略return 0;有一定宽容度但养成良好的返回值习惯有助于理解进程退出码的含义也为后续学习操作系统中进程状态码的概念打下基础。printf 与 scanf 的格式控制printf和scanf是 C 语言最常用的输入输出函数它们的第一个参数是格式控制字符串后续参数是要输出或读取的变量。格式控制符必须与变量类型严格匹配这是初学者最容易忽视的规则。%d对应int%f对应float和double%c对应char%s对应字符串。如果类型不匹配比如用%f输出int类型的变量编译器通常只会发出警告但运行时会产生不可预期的结果——可能输出乱码也可能读取错误的内存数据。这是因为printf是一个可变参数函数编译器在调用时不会检查后续参数的类型是否与格式字符串匹配。scanf的使用有一个特别容易遗漏的细节变量名前必须加取地址符。scanf需要知道变量的内存地址才能将读取到的数据写入进去。但数组名本身代表的就是地址所以scanf(%s, str)不需要加而scanf(%d, a)必须加。这种不一致性常常让新手困惑记住一个原则除了数组名和字符串常量给scanf传变量时一律加。#include stdio.h int main() { int age; printf(请输入年龄: ); scanf(%d, age); // 不可省略 printf(你的年龄是 %d 岁\n, age); return 0; }二、数据类型与变量基本类型的内存占用C语言的数据类型决定了变量在内存中占据的空间大小和解释方式。char占 1 字节short通常占 2 字节int在大多数现代平台上占 4 字节long在 Windows 上通常是 4 字节、在 Linux 64 位上是 8 字节long long固定为 8 字节。float占 4 字节double占 8 字节。这些大小不是 C 标准强制规定的而是由平台和编译器决定。sizeof运算符可以在编译时获取某个类型或变量在当前平台上的实际字节数这是编写可移植代码时的重要工具。变量初始化的重要性C语言有一个让很多初学者栽跟头的特性局部变量不会自动初始化为 0。当你声明int sum;时sum中存储的是该内存位置之前留下的随机值也就是所谓的垃圾值。如果直接用它参与运算结果完全不可预期。这种错误在编译时不会报错运行时也可能不会立即崩溃而是产生看似合理实则错误的计算结果极具隐蔽性难以发现。正确的做法是声明时立即赋初值。如果想将数组全部元素清零最简洁的写法是int arr[100] {0};——只给第一个元素显式赋值为 0编译器会自动将剩余元素也初始化为 0。整数溢出沉默的杀手整数溢出是 C 语言中一类非常危险的错误。当无符号整数溢出时C 标准明确定义为回绕wrap around即超过最大值后从 0 重新开始。但当有符号整数溢出时属于未定义行为Undefined Behavior编译器可以做出任何处理——可能回绕变成负数也可能直接优化掉这段代码甚至导致程序崩溃。#include stdio.h #include limits.h int main() { int max INT_MAX; // 2147483647 int overflow max 1; // 未定义行为可能变成 -2147483648 printf(溢出结果: %d\n, overflow); return 0; }赋值与比较的混淆if (a 0)和if (a 0)看起来很像但意义完全不同。前者将 0 赋值给a然后判断表达式的值0 为假后者才是比较a是否等于 0。这种错误在语法上是完全合法的编译器通常只会发出警告因此很容易在代码审查中被忽略。一种防御性编程习惯是将常量写在比较运算符的左边if (0 a)。这样如果误写成if (0 a)编译器会直接报错因为不能给常量赋值。三、分支与循环if-else 与三元运算符if-else是最基本的分支结构。编写多分支判断时建议按照条件范围从大到小或从小到大排列逻辑更清晰。三元运算符condition ? a : b是if-else的简洁写法适合简单的赋值场景但嵌套过深会严重降低可读性。switch 的穿透特性switch语句配合case使用时每个case末尾的break至关重要。如果遗漏case会穿透到下一个case继续执行。虽然有时故意利用穿透让多个case共享同一段逻辑但更多情况下是程序员的疏忽导致一个条件满足后连续执行了后续所有分支的逻辑。#include stdio.h int main() { int day 2; // 忘记 break 的错误版本 switch(day) { case 1: printf(周一\n); case 2: printf(周二\n); // 从这里开始执行 case 3: printf(周三\n); // 继续穿透 case 4: printf(周四\n); // 继续穿透 } // 输出周二 周三 周四 return 0; }循环的边界思维for、while、do-while三种循环各有适用场景。for适合已知循环次数的场景while适合条件驱动的场景do-while保证至少执行一次循环体。循环中最常见的错误是边界问题。访问数组arr[5]时有效下标是 0 到 4写成i 5或i 6都会导致越界。另一个隐蔽的陷阱是浮点数比较由于浮点数在计算机中不能精确表示很多十进制小数如 0.1直接用比较两个浮点数是否相等往往是不可靠的。正确的做法是用误差范围判断fabs(a - b) 1e-6。#include stdio.h #include math.h int main() { double a 0.1 0.2; double b 0.3; if (a b) { printf(相等\n); // 可能不会执行 } if (fabs(a - b) 1e-9) { printf(在误差范围内相等\n); // 正确 } return 0; }四、小结基础阶段的核心是建立变量有类型、类型有大小、访问有边界的思维习惯。编译器的警告信息如变量未使用、类型转换可能丢失数据往往是排查错误的最佳线索建议在编译时开启-Wall选项将警告视为错误来对待。养成初始化变量、检查边界、验证输入的习惯能让你的代码从一开始就站在可靠的基础上。

相关新闻

html

html

表格<table></table> 用来创建表格<tr></tr> 表示行<td></td> 表示列 普通单元格&#xff08;内容&#xff09;<th></th> 和 td 的用法一样 表头单元格&#xff0c;文字默认加粗、居中HTML 表格&#xff1a;colspan 跨列、r…

2026/8/16 21:37:53 阅读更多 →
展锐平台 触摸调试TP bringup

展锐平台 触摸调试TP bringup

前言一般lcd和tp应该是一起点亮的&#xff0c;这里分开了&#xff0c;详细lcd点亮方法查看上一篇lcd bringup参考修改目录STEP1把厂商给得驱动放入文件夹ker/kernel6.6/unisoc-modules/touchscreen/修改对应的Kconfig和makefile,这里是tp驱动是否被加载和编译的关键文件# # Uni…

2026/8/17 18:03:27 阅读更多 →
AI发展简史全脉络梳理,含5大技术断层、8次 funding 崩塌预警信号及2025不可逆拐点预判

AI发展简史全脉络梳理,含5大技术断层、8次 funding 崩塌预警信号及2025不可逆拐点预判

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;AI发展简史全脉络梳理&#xff0c;含5大技术断层、8次 funding 崩塌预警信号及2025不可逆拐点预判 人工智能的发展并非线性演进&#xff0c;而是一系列技术跃迁与资本潮汐共振的结果。回溯七十余年历程&#x…

2026/8/8 12:05:11 阅读更多 →

最新新闻

skill-icons 5大核心参数终极教程:i/theme/perline/titles/align 一网打尽

skill-icons 5大核心参数终极教程:i/theme/perline/titles/align 一网打尽

skill-icons 5大核心参数终极教程&#xff1a;i/theme/perline/titles/align 一网打尽 【免费下载链接】skill-icons "Fork" of official skill-icons repository. Showcase your skills on your Github readme or resum with ease ✨ 项目地址: https://gitcode.c…

2026/8/17 18:52:46 阅读更多 →
汽车后市场数字化赋能:从标准化服务网络到区域化深度运营

汽车后市场数字化赋能:从标准化服务网络到区域化深度运营

1. 从一则融资新闻看汽车后市场的“毛细血管”生意最近&#xff0c;汽车后市场服务商“车兄弟”完成千万级融资的消息&#xff0c;在行业圈子里激起了一些讨论。乍一看&#xff0c;这似乎又是一起平平无奇的资本事件&#xff0c;毕竟在万亿级的汽车后市场里&#xff0c;千万级别…

2026/8/17 18:52:46 阅读更多 →
electron-browser-shell API 终极参考:electron-chrome-extensions 从核心类到 browser-action-list 全收录

electron-browser-shell API 终极参考:electron-chrome-extensions 从核心类到 browser-action-list 全收录

electron-browser-shell API 终极参考&#xff1a;electron-chrome-extensions 从核心类到 browser-action-list 全收录 【免费下载链接】electron-browser-shell A minimal, tabbed web browser with support for Chrome extensions—built on Electron. 项目地址: https://…

2026/8/17 18:52:46 阅读更多 →
抖音评论采集实战复盘:1100条评论批量导出Excel的完整流程与避坑记录

抖音评论采集实战复盘:1100条评论批量导出Excel的完整流程与避坑记录

抖音评论采集实战复盘&#xff1a;1100条评论批量导出Excel的完整流程与避坑记录 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 上周五下班前&#xff0c;我把一份 1176 行的 Excel 丢进工作群&#xff0c…

2026/8/17 18:52:46 阅读更多 →
不用装虚拟机,Apple芯片Mac也能直接跑Windows软件:Whisky上手手记

不用装虚拟机,Apple芯片Mac也能直接跑Windows软件:Whisky上手手记

不用装虚拟机&#xff0c;Apple芯片Mac也能直接跑Windows软件&#xff1a;Whisky上手手记 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 两年前的那个周五&#xff0c;我收到客户发…

2026/8/17 18:52:45 阅读更多 →
计算机扫盲:计算机的病毒

计算机扫盲:计算机的病毒

刚子&#xff1a;电脑中病毒了&#xff0c;是不是要换一台&#xff1f;刚子今天打开电脑&#xff0c;右下角突然弹出一个红色警告框&#xff1a;“您的电脑已被病毒感染&#xff01;立即下载XX安全卫士进行查杀&#xff01;”刚子吓得手抖&#xff0c;差点把鼠标扔出去。他赶紧…

2026/8/17 18:51:45 阅读更多 →

日新闻

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题

1. 项目概述&#xff1a;为什么异步调用是LabVIEW进阶的必修课&#xff1f; 如果你用LabVIEW做过稍微复杂点的项目&#xff0c;尤其是涉及界面响应、多任务并行或者硬件IO等待的场景&#xff0c;大概率遇到过这样的窘境&#xff1a;前面板点个按钮&#xff0c;整个程序就“卡死…

2026/8/17 0:00:08 阅读更多 →
LabVIEW异步调用实战:解决界面卡顿与并行处理难题

LabVIEW异步调用实战:解决界面卡顿与并行处理难题

1. 项目概述&#xff1a;为什么异步调用是LabVIEW进阶的必经之路如果你在LabVIEW里写过稍微复杂点的程序&#xff0c;尤其是涉及到界面响应、多任务并行或者硬件IO等待&#xff0c;大概率会遇到一个头疼的问题&#xff1a;程序“卡”住了。前面板点不动&#xff0c;进度条不更新…

2026/8/17 0:00:08 阅读更多 →
飞书局域网文件传输实战:3种方案实现高速点对点传输

飞书局域网文件传输实战:3种方案实现高速点对点传输

1. 项目概述&#xff1a;为什么要在局域网内用飞书传文件&#xff1f; 飞书作为一款主流的协同办公套件&#xff0c;其核心功能是围绕云端协作设计的。无论是文档、表格还是文件&#xff0c;通常的分享逻辑都是“上传到云端 -> 生成链接 -> 分享给同事”。这个流程在互联…

2026/8/17 0:00:08 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者&#xff0c;最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent&#xff0c;从本地部署到云端API&#xff0c;我们正处在一个技术栈快速重构的节点。然而&#xff0c;面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →