C语言笔试易错点复盘:从底层原理看细节

news/2026/1/25 16:45:47/文章来源:https://www.cnblogs.com/wwwicjh/p/19530100

在最近的练习中,我遇到了几个简单却暗藏玄机的经典问题。这些实际问题则体现了C语言的内存模型、类型转换规则以及标准定义。简单做对题目是不够的,还需要知其然。以下是我对这些易错点的深度复盘与总结,希望,暂停未来的科研与工程实践打下扎实的基础。

1. 隐式类型转换:有符号与无符号的混合运算

题目代码:

int main() {unsigned int a = 6;int b = -20;// 思考:a + b 的结果是多少?(a + b > 6) ? printf("> 6") : printf("<= 6");return 0;
}

运行结果: > 6
深度解析:
这里考察的是 C 语言的整型提升 (Integer Promotion) 规则。
当 unsigned int 和 int 进行混合运算(如相加、比较)时,C 语言标准规定有符号数会自动转换为无符号数。
变量 b 的值是 -20。在计算机中,它以补码形式存储。
-20 转换为 unsigned int 时,其补码(如 0xFFFFFFEC)会被直接解释为一个巨大的正数。
因此,6 + (巨大的正数) 显然远大于 6。
避坑指南: 尽量避免在逻辑判断中混合使用有符号和无符号数,或者在比较前进行显式的强制类型转换。

2. 内存布局:字符串字面量与段错误

题目代码:

int main() {char *s = "hello"; s[0] = 'H';  // 尝试修改第一个字符return 0;
}

运行结果: 程序崩溃,报 Segmentation Fault (段错误)。
深度解析:
这道题考察的是 C 语言的内存分区。
"hello" 是一个字符串常量。编译器通常将其存储在只读数据段 (.rodata)。
变量 s 是一个指针,存储在栈上,指向这个只读区域。
s[0] = 'H'; 试图通过指针去“写入”一个被操作系统标记为“只读”的内存页。CPU 捕获到非法访问,触发段错误。
正确做法: 如果需要修改字符串,应使用数组,将字符串拷贝到栈上:
char s[] = "hello"; // 存储在栈上,可读写
s[0] = 'H'; // 合法

3. 指针与 Const 的纠葛:向左看,向右看

题目代码:
辨析 const int * p 和 int * const p 的区别。

深度解析:
这两个概念很容易混淆,记忆口诀是 “向左看,锁定它”(const 修饰它左边的内容,如果左边没东西,就修饰右边的)。
const int * p (或 int const * p)
名称: 常量指针 (Pointer to Const)。
理解: const 在 * 的左边,修饰的是 *p(指针指向的内容)。
后果: 你的“内容”被锁了。
*p = 10; (❌ 错误,不能修改内容)
p = &b; (✅ 正确,指针本身可以指向别处)
int * const p
名称: 常量指针 (Const Pointer)。
理解: const 在 * 的右边,修饰的是 p(指针本身)。
后果: 你的“指向”被锁了。
*p = 10; (✅ 正确,内容可以修改)
p = &b; (❌ 错误,指针不能改变指向)
4. 未定义行为 (UB):序列点的陷阱
题目代码:

int i = 0;
i = i++;
// 思考:i 最后的值是多少?

运行结果: 未定义行为 (Undefined Behavior)。
深度解析:
很多初学者会纠结是先赋值还是先自增,实际上这在 C 标准中是未定义的。
核心概念: 序列点 (Sequence Point)。标准规定,在两个序列点之间,一个变量的值只能被修改一次。
i = i++ 在同一个表达式中两次尝试修改 i(一次是 i++ 的副作用,一次是 = 的赋值)。
编译器可以自由决定执行顺序,甚至生成导致程序死循环或崩溃的代码。
避坑指南: 永远不要写出依赖求值顺序的复杂表达式。代码不仅要给机器看,更要给人看。
总结:
C 语言的强大在于灵活,陷阱也在于灵活。掌握这些底层细节,不仅能通过笔试,更能让我们写出健壮、可移植的代码。

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

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

相关文章

34.合并 K 个升序链表

LCR 078. 合并 K 个升序链表 给定一个链表数组,每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:…

网页版射击游戏:无限弹药升级枪械

基于Canvas的射击游戏&#xff0c;包含灵活移动的敌人和可升级的枪械系统。 游戏功能说明 核心玩法&#xff1a; 使用WASD或方向键控制玩家移动 鼠标点击射击&#xff08;无限弹药&#xff09; 击败敌人获得金币和分数 每波敌人数量会增加&#xff0c;难度提升 敌人AI系统…

2026年市面上有名的铝门窗定制选哪家,铝门窗/窗纱一体铝门窗/侧压平移推拉窗/门窗/推拉窗,铝门窗生产厂家排行榜

随着消费者对家居品质与安全意识的不断提升,窗纱一体铝门窗市场正经历一场从“基础功能”向“系统化解决方案”的深刻变革。市场调研显示,用户需求已不再局限于简单的通风与防护,而是对产品的安全性能、隔音隔热效果…

分布式计算深度解析:从理论到实践的技术探索 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

人格的三重博弈:弗洛伊德人格结构理论解析

人格的三重博弈&#xff1a;弗洛伊德人格结构理论解析在精神分析理论的发展历程中&#xff0c;西格蒙德弗洛伊德&#xff08;Sigmund Freud&#xff09;于1923年在《自我与本我》中提出的“人格三重结构”理论&#xff0c;是对其早期意识三层结构的深化与重构。这一理论将人格划…

全网最全8个一键生成论文工具,专科生轻松搞定毕业论文!

全网最全8个一键生成论文工具&#xff0c;专科生轻松搞定毕业论文&#xff01; AI 工具让论文写作不再难 随着人工智能技术的不断发展&#xff0c;越来越多的专科生开始借助 AI 工具来完成毕业论文的撰写。这些工具不仅能够有效降低 AIGC 率&#xff0c;还能在保持语义通顺的…

linux du command parallel

distribute jobs to multi cores echo du.result for i in *ent do du --apparent-size -BK -s $i >> du.result & done

一个月玩转物联网MQTT(杂记篇一)

需求&#xff1a; 我希望在一个月内完成一个完整的物联网项目&#xff1a;基于 STM32 的倾角传感器采集角度数据&#xff0c;通过 4G 模块以 MQTT 协议上传到云端&#xff0c;最终在网页和手机端可视化展示多台设备的数据&#xff0c;用于仓库货架倾斜监控。 1、硬件选型与搭建…

TB370FU原厂刷机包免费下载_CN_ZUI_15

原厂刷机包下载 https://pan.quark.cn/s/5f1205c4069c联想小新 Pad Pro 12.7(天玑版)原厂刷机包下载 转载请标注来源:https://www.cnblogs.com/mianfeijiaocheng/p/19530087 所有固件都是我手动上传的,不是机器人或…

机器缩容要注意哪些问题

机器缩容是服务集群 / 云资源运维的核心操作,核心要围绕业务无感知、数据不丢失、服务不中断、资源无残留展开,需覆盖缩容前评估、缩容中执行、缩容后校验全流程,同时兼顾容器 / 云服务器 / 分布式集群等不同部署形…

web3基础概念与实际意义

概念要理解 Web3,得先看它是怎么演变来的。互联网到现在其实经历了三个阶段,可以理解为数字社会的‘三次工业革命’:”第一阶段:Web 1 —— “只读互联网” (Read-Only)“大约是 90 年代到 2004 年。那时是以新浪、…

AT_abc442 - crazy-

F 简单dp优化 A #include<bits/stdc++.h> // #define int long long using namespace std;signed main() {string s;int ans=0;cin>>s;for(int i=0;i<s.size();i++) ans+=(s[i]==i || s[i]==j);cout<…

AT_abc329_f Colored Ball - crazy-

启发式合并 题意 例:abc329_f 有 \(N\) 个编号为 \(1, 2, \ldots, N\) 的箱子,最开始第 \(i\) 个箱子里有一个颜色为 \(C_i\) 的球。 现在给出 \(Q\) 个查询,请依次处理这些查询。 每次查询给出 \(a,b\),将箱子 \(…

【计算机毕业设计案例】基于springboot的社区居民健康管理系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

FastAPI系列(09):文件上传

本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695 上传单个小文件(bytes类型) 示例from fastapi import FastAPI, File from typing import List import uvicornapp = FastAPI()@app.post(&qu…

7款AI论文写作工具实测:轻松搞定毕业论文,自动匹配真实参考文献!

大学生、研究者写论文常遇起步难、效率低、合规风险三大痛点,AI论文写作工具可针对性解决。本文拆解痛点后,对比7款主流工具核心功能,重点测评图灵论文AI写作助手:10分钟零基础上手,输入题目选类型即匹配学科框架…

【机器学习深度学习】强化学习与监督学习SFT、RL、RLHF、PPO、DPO - 实践

【机器学习&深度学习】强化学习与监督学习SFT、RL、RLHF、PPO、DPO - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

2026年塑石假山修建优质厂家推荐指南

2026年塑石假山修建优质厂家推荐指南一、文旅景观行业背景与假山配套需求洞察据《2025-2030年中国文旅景观行业发展白皮书》数据显示,2025年国内文旅项目中,景观配套民宿的需求同比增长37.2%,其中塑石假山作为兼具功…

闲置携程任我行礼品卡回收变现,认准京顺回收

在消费场景日益多元的当下,礼品卡作为便捷赠礼方式广泛流行,可大量闲置礼品卡因长期未激活,造成了资源浪费。第三方数据机构调研显示,我国每年闲置礼品卡市场规模超千亿元,旅游类礼品卡占比达23%,“沉睡”的携程…

FastAPI系列(08):form表单数据

本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695 form表单数据 Form组件是fastapi里的 FastAPI可以使用Form组件来接收表单数据,需要先使用pip install python-multipart命令进行安装 安装:…