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/5 23:42:58 阅读更多 →
展锐平台 触摸调试TP bringup

展锐平台 触摸调试TP bringup

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

2026/8/5 23:41:58 阅读更多 →
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/5 23:41:58 阅读更多 →

最新新闻

BigDecimal 精度完全指南

BigDecimal 精度完全指南

BigDecimal 舍入模式完全指南 Java 的 BigDecimal 提供了 7 种舍入模式(Rounding Mode),用于控制数值在精度截断时的行为。正确选择舍入模式,对金融、计费、统计等业务至关重要。 一、舍入模式总览 舍入模式 常量值 中文含义 核心特点 ROUND_UP 0 向上舍入 远离零方向舍入 …

2026/8/6 2:29:00 阅读更多 →
CCD图像传感器:从光电转换原理到科学级应用实战

CCD图像传感器:从光电转换原理到科学级应用实战

1. 从“底片”到“电子眼”&#xff1a;CCD的诞生与核心价值如果你玩过胶片相机&#xff0c;一定记得那种小心翼翼冲洗底片的体验。底片上的卤化银颗粒感光后形成潜影&#xff0c;再经过化学显影&#xff0c;最终定格下我们看到的画面。CCD&#xff0c;也就是电荷耦合器件&…

2026/8/6 2:29:00 阅读更多 →
华为MateBook 13右侧Type-C接口失灵排查与修复全指南

华为MateBook 13右侧Type-C接口失灵排查与修复全指南

1. 问题现象与初步排查&#xff1a;当你的“生产力接口”突然罢工作为一名常年与各种电子设备打交道的从业者&#xff0c;我深知笔记本电脑上一个接口失灵带来的困扰&#xff0c;尤其是像华为MateBook 13这类主打轻薄便携的型号&#xff0c;接口本就精简&#xff0c;每一个都至…

2026/8/6 2:29:00 阅读更多 →
工业机器人工具坐标系(TCP)标定:原理、六点法实操与精度优化

工业机器人工具坐标系(TCP)标定:原理、六点法实操与精度优化

1. 项目概述&#xff1a;从“末端”到“指尖”的精确控制在工业机器人编程与调试的日常工作中&#xff0c;工具坐标系&#xff08;Tool Coordinate System, TCP&#xff09;的准确定义&#xff0c;是决定机器人能否精准完成涂胶、焊接、打磨、装配等任务的生命线。它定义了机器…

2026/8/6 2:29:00 阅读更多 →
突破音乐格式限制:用unlock-music实现数字音乐自由的完整方案

突破音乐格式限制:用unlock-music实现数字音乐自由的完整方案

突破音乐格式限制&#xff1a;用unlock-music实现数字音乐自由的完整方案 【免费下载链接】unlock-music 音乐解锁&#xff1a;移除已购音乐的加密保护。 目前支持网易云音乐(ncm)、QQ音乐(qmc, mflac, tkm, ogg) 。此版本为预构建版本。 项目地址: https://gitcode.com/gh_m…

2026/8/6 2:29:00 阅读更多 →
PHP开发中易被忽略的细节:字符串比较、数组键值与类型转换陷阱

PHP开发中易被忽略的细节:字符串比较、数组键值与类型转换陷阱

最近在整理项目代码时&#xff0c;发现一个老项目里有一段处理用户输入的逻辑&#xff0c;因为对 PHP 中字符串和数组的某些特性理解不够深入&#xff0c;导致了一个隐蔽的 Bug。这让我意识到&#xff0c;即使是经验丰富的开发者&#xff0c;也可能在某些“小小”的细节上栽跟头…

2026/8/6 2:27:59 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述&#xff1a;为什么我们需要深入LimboAI的C内核&#xff1f;如果你是一名使用Godot引擎的游戏开发者&#xff0c;尤其是对AI行为逻辑有较高要求的项目&#xff0c;那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好&#xff0c;我是老张&#xff0c;一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架&#xff0c;处理了角色移动和碰撞&#xff0c;这一期&#xff0c;我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延&#xff0c;无需电控启动&#xff0c;是建筑被动消防系统核心构件&#xff0c;行业依托新规管控、城市更新、工业安全升级迎来稳定扩容&#xff0c;整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流&#xff1a;一个核心问题的诞生想象一下&#xff0c;你是一个城市供水系统的总工程师。你的城市有多个水源&#xff08;水库&#xff09;&#xff0c;需要通过一个复杂的地下管道网络&#xff0c;将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起&#xff1a;为什么我们需要互相关几年前&#xff0c;我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号&#xff0c;理论上它们接收到的声音波形应该非常相似&#xff0c;只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/5 21:00:14 阅读更多 →
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/5 23:46:51 阅读更多 →