C 语言学习笔记

文章目录

  • 程序设计入门 --- C 语言
    • 第一周 程序设计与 C 语言
      • 1 计算机与编程语言:计算机怎么做事情的,编程语言是什么
        • 📒 1.1 计算机的普遍应用 —— 离了它,现代人可能不会“活”了
          • **🌐 科学计算:计算机的“最强大脑”时刻**
          • **📊 数据处理:现代社会的“数字管家”**
          • **🎨 辅助设计:从“手绘党”到“CAD大神”**
          • **🤖 过程控制:让机器“自己动”**
          • **🧠 人工智能:从“人工智障”到“真·AI”**
          • **🌐 网络应用:地球村“村民”的日常生活**
          • **🎮 娱乐应用:游戏党的“精神鸦片”**
          • **🏥 医疗健康:从“望闻问切”到“AI问诊”**
          • **🏭 工业生产:从“手工打造”到“黑灯工厂”**
          • **📌 本节总结**
        • **📒 1.2 计算机与人的交互 —— 从“鸡同鸭讲”到“心有灵犀”的进化史**
          • **🤔 交互是什么?人和计算机的“对话”艺术**
          • **💻 交互进化史:从“密码专家”到“读心术”**
          • **🎮 交互类型大赏:手残党 vs 技术流**
          • **🚀 当前趋势:多模态交互“全家桶”**
          • **📌 本节总结**
        • **📒 1.3 计算机的工作原理 —— 从“按按钮”到“秒懂你”的魔法揭秘**
          • **🔮 核心问题:计算机怎么“听懂”你的指令?**
          • **🧩 拆解计算机的“身体构造”**
          • **🚀 计算机的“工作流程”**
          • **🧠 计算机的“思维模式”:二进制**
          • **💡 关键原理:冯·诺依曼结构**
          • **📌 本节总结**
        • **📒 1.4 编程语言的作用 —— 人类与计算机的“翻译官”修炼手册**
          • **🤖 编程语言是什么?**
          • **💡 编程语言的三大核心作用**
            • **1. 抽象化:让计算机“听懂人话”**
            • **2. 效率提升:从“手搓代码”到“乐高式开发”**
            • **3. 跨平台与领域适配:一门语言走天下**
          • **🎮 编程语言的“隐藏技能”**
            • **1. 思维训练:计算思维养成记**
            • **2. 创意实现:从“脑洞”到“现实”**
            • **3. 职业赋能:从“打工人”到“技术大佬”**
          • **📌 本节总结**
      • 2 计算机的思维方式:重复是计算机最擅长的
        • **📒 2.1 计算机的思维方式 —— 从“机械执行”到“逻辑推理”的进化论**
          • **🤖 计算机的“底层逻辑”:二进制与逻辑门**
          • **🧠 算法思维:解决问题的“套路大全”**
          • **🚀 计算机的“超能力”:并行与批量处理**
          • **⚠️ 计算机的“局限性”:没有“常识”,只有“规则”**
          • **🔮 计算机思维的“进化”:从规则到学习**
          • **📌 本节总结**
        • **📒 2.2 解释执行与编译执行:程序员的“翻译官”之争**
          • **🤔 核心问题:代码怎么变成计算机能懂的“话”?**
          • **🔄 解释执行:逐行“翻译”,现场表演**
          • **⚡️ 编译执行:一次性“翻译”,电影上映**
          • **🆚 解释执行 vs 编译执行:一场没有胜负的战争**
          • **🌉 折中方案:JIT 编译**
          • **📌 本节总结**
      • 3 为什么学 C 语言:C 语言在工业界有重要地位,在很多领域无可替代
        • **📒3.1 C语言在工业界的地位:底层霸主与跨平台王者**
          • **🏆 工业界的“底层基建”:操作系统与嵌入式开发**
          • **🔧 工业控制的“瑞士军刀”:PLC 与机器人编程**
          • **🚀 高性能计算的“隐形冠军”**
          • **🔄 现代工业的“粘合剂”:跨语言协作**
          • **🛡️ 安全性升级:从“野蛮生长”到“防御编程”**
            • **📌 本节总结**
        • **📒3.2 语言的库对其重要性的影响:编程世界的“生态战争”**
          • **🔍 库:编程语言的“武器库”与“弹药”**
            • **🚀 1. 开发效率:用库“拼乐高”,不用“手搓零件”**
            • **🔧 2. 生态壁垒:得库者得天下**
            • **🌐 3. 适用场景:库决定语言的“能力边界”**
            • **⚠️ 4. 库的“双刃剑”效应**
          • **📌 本节总结**
      • 4 关于 C 语言和版本的历史
        • **📒4.1 C语言起源与发展:从UNIX内核到现代工业的编程语言传奇**
          • **🌱 起源:为UNIX而生的“技术革命”**
          • **📚 发展:从“K&R标准”到国际化演进**
          • **🔧 技术特性:高效与灵活的“双刃剑”**
          • **🏭 工业应用:现代科技的“隐形支柱”**
          • **🌍 影响与传承:从 C 到现代编程语言生态**
          • **📌 本节总结**
      • 5 环境安装:Visual C _2010_学习版_离线包(2025年全国计算机二级 C 语言考试官方指定版本)和 Microsoft Visual Studio
          • **⚠️ 重要前提**
          • **🔧 安装步骤**
        • **第一步:安装 Visual C++ 2010 学习版**
        • **第二步:安装 Microsoft Visual Studio(以VS 2022为例)**

程序设计入门 — C 语言

老师:“C语言是编程之母,学好了它,其他语言都是弟弟!”

我:“好好好,母上大人好!”(内心OS:母上大人怎么连个 Hello World 都写不利索?)

第一周 程序设计与 C 语言

本周目标:从编程小白进阶成“能写出 Hello World 但会被自己蠢哭”的菜鸟。

1 计算机与编程语言:计算机怎么做事情的,编程语言是什么

计算机就像一个绝对听话但超级笨的机器人

📒 1.1 计算机的普遍应用 —— 离了它,现代人可能不会“活”了
🌐 科学计算:计算机的“最强大脑”时刻
  • 应用场景:天气预报、火箭发射、基因测序……
  • 吐槽
    “每次看天气预报都怀疑人生,计算机算得准,但雨总爱挑我出门时下!不过想想,没有它,我们可能还在用‘乌龟壳占卜法’预测天气……”
📊 数据处理:现代社会的“数字管家”
  • 应用场景:
    • 办公:Excel、Word、PPT “三件套”打工人必备。
    • 生活:网购记录、外卖地址、短视频推荐算法……
  • 崩溃瞬间
    “Excel公式写错,全公司数据乱成一锅粥,老板差点让我用算盘重新算!”
    “推荐算法比我还懂我?刷半小时短视频,满屏都是‘一秒教你月入十万’的广告!”
🎨 辅助设计:从“手绘党”到“CAD大神”
  • 应用场景:
    • 建筑师用CAD画图纸,工程师用 SolidWorks 设计零件。
  • 吐槽
    “以前画图靠尺子和橡皮,现在靠鼠标和 Ctrl+Z(撤销)!不过,软件崩溃时,我画了一周的图可能连‘再见’都没说就消失了……”
🤖 过程控制:让机器“自己动”
  • 应用场景:
    • 工厂自动化生产线、地铁信号系统、智能家居。
  • 崩溃瞬间
    “智能家居?智障家居还差不多!说好的‘语音控制空调’,结果它听成了‘播放《最炫民族风》’!”
    “工厂机器人罢工?维修费够我半年的工资了……”
🧠 人工智能:从“人工智障”到“真·AI”
  • 应用场景:
    • 语音助手(Siri、小爱同学)、自动驾驶、人脸识别。
  • 吐槽
    “Siri,帮我定个闹钟!Siri:‘我不太明白你在说什么……’(行,你赢了)”
    “人脸识别失败?我妆前妆后差别有这么大吗?还是它根本没见过素颜的我?”
🌐 网络应用:地球村“村民”的日常生活
  • 应用场景:
    • 社交媒体(微信、微博)、在线教育(网课)、远程办公(Zoom)。
  • 崩溃瞬间
    “网课卡成PPT,老师问我为什么不动,我:‘老师,我网卡了……’(实际在偷吃零食)”
    “微信消息发不出去,对方以为我高冷,其实我只是没流量了……”
🎮 娱乐应用:游戏党的“精神鸦片”
  • 应用场景:
    • 电子游戏(LOL、原神)、VR/AR体验、流媒体(B站、抖音)。
  • 吐槽
    “游戏延迟460ms,队友问我为什么挂机,我:‘我在用意念操作!’(实际在摔鼠标)”
    “B站刷到凌晨三点,第二天顶着黑眼圈上课,老师:‘昨晚熬夜学习了吧?’(我:‘是的,老师……’)”
🏥 医疗健康:从“望闻问切”到“AI问诊”
  • 应用场景:
    • 医疗影像分析(CT、MRI)、电子病历、远程手术。
  • 吐槽
    “AI问诊?我咳嗽两声,它说我得了‘绝症’,吓得我立马买了份保险!”
    “电子病历方便是方便,但医生字迹再潦草,也挡不住它打印出来工工整整……”
🏭 工业生产:从“手工打造”到“黑灯工厂”
  • 应用场景:
    • 自动化生产线、工业机器人、质量检测。
  • 崩溃瞬间
    “工业机器人精度0.01mm,但操作失误一次,整个车间可能陪我‘加班’到天亮……”
    “质量检测系统太严格?我做的零件被它打了10次回炉重造,最后我发现是系统参数设错了……”
📌 本节总结
  1. 计算机已经渗透到生活的方方面面,从“高大上”的科研到“接地气”的娱乐。
  2. 它让生活更便捷,但也带来了新烦恼(比如AI的“人工智障”时刻)。
  3. 吐槽归吐槽,但离了它,现代人可能真的不会“活”了……
📒 1.2 计算机与人的交互 —— 从“鸡同鸭讲”到“心有灵犀”的进化史
🤔 交互是什么?人和计算机的“对话”艺术

人机交互(HCI)就是人跟计算机“聊天”的过程,只不过计算机是个“钢铁直男”,只会按固定套路回应你。

  • 核心三要素:
    • :得会“说”计算机能听懂的话(比如点鼠标、喊“Siri”)。
    • 计算机:得把人的指令翻译成自己能执行的操作(比如你点“保存”,它就把文件存到硬盘)。
    • 交互方式:就是中间那层“翻译官”,比如键盘、屏幕、语音助手。

吐槽
“以前跟计算机对话像加密电报,现在像聊微信——但偶尔它还是听不懂人话!”

💻 交互进化史:从“密码专家”到“读心术”
  1. 远古时代:打孔卡片+命令行(1940s-1970s)
    • 操作方式:在卡片上打孔代表指令,或者敲代码(比如print "Hello")。
    • 体验:“感觉自己在给计算机发摩斯密码,错一个孔就全崩!”
  2. PC时代:图形界面+鼠标(1980s-1990s)
    • 操作方式:苹果Macintosh和微软Windows带火了“点图标、拖窗口”。
    • 体验:“终于不用背命令了!鼠标一划,世界都是我的~”
  3. 移动互联网时代:触控屏(2000s-2010s)
    • 操作方式:iPhone引领的“指哪打哪”,滑动、缩放全靠手。
    • 体验:“手机屏幕比我脸还干净,因为全是指纹……”
  4. AI时代:语音/手势/VR(现在)
    • 操作方式:喊“Siri”订外卖、挥挥手打游戏、戴VR头盔“穿越”。
    • 体验:“感觉自己是钢铁侠!但偶尔喊十遍‘Siri’它才理我……”

未来展望

  • 脑机接口:直接“意念操控”,比如用大脑想“播放周杰伦”,电脑秒懂。
  • 情感计算:计算机能识别你的情绪,你生气时它自动放《暖暖》。
🎮 交互类型大赏:手残党 vs 技术流
  1. 触控交互

    :手机、平板的“点滑缩放”。

    • 优势:直观,连我奶奶都会。
    • 崩溃瞬间:冬天戴手套无法解锁,只能对着屏幕哈气……
  2. 语音交互

    :Siri、小爱同学。

    • 优势:开车时喊“调低空调”超方便。
    • 崩溃瞬间:“Siri,播放《凉凉》!Siri:‘好的,正在播放《热热》……’”
  3. 手势交互

    :体感游戏、VR手势识别。

    • 优势:玩《节奏光剑》像在舞剑,燃脂又解压。
    • 崩溃瞬间:手势太复杂,像在跳“广场舞版黑客帝国”。
  4. 生物识别

    :指纹、人脸解锁。

    • 优势:再也不用记密码!
    • 崩溃瞬间:化妆后手机认不出我,仿佛被“渣机”抛弃……
🚀 当前趋势:多模态交互“全家桶”

现在流行**“混搭风”**,比如:

  • VR游戏:手柄+手势+语音,全方位沉浸。
  • 智能汽车:触控屏+语音+手势,开车时不用分心找按钮。
  • 智能家居:手机APP+语音+传感器,躺床上喊“关灯”就能睡。

吐槽
“以后交互方式可能比火锅蘸料还多,选择困难症要疯了!”

📌 本节总结
  1. 交互就是人和计算机的“对话”,从打孔卡片进化到“意念操控”。
  2. 现在流行“混搭交互”,未来可能“心有灵犀”——计算机比你妈还懂你。
  3. 吐槽归吐槽,但每次交互升级都让我感叹:“科技,真香!”
📒 1.3 计算机的工作原理 —— 从“按按钮”到“秒懂你”的魔法揭秘
🔮 核心问题:计算机怎么“听懂”你的指令?

想象一下,你对着计算机喊:“把这张照片P成漫画风!”

计算机的内心OS:“好嘞!但首先,我得拆解成以下步骤……”

🧩 拆解计算机的“身体构造”

计算机就像一个分工明确的团队,每个部件各司其职:

  1. CPU(中央处理器):
    • 角色:团队里的“超级大脑”,负责算数、逻辑判断和发号施令。
    • 特点:快但“健忘”(比如算完1+1=2,马上忘记过程)。
    • 吐槽:“CPU速度以 GHz 计,但每次只能做一件事,多线程?不存在的!”
  2. 内存(RAM):
    • 角色:CPU的“临时工作台”,存放正在运行的程序和数据。
    • 特点:读写快,但断电就清空(比如游戏没保存就关机,进度归零)。
    • 比喻:“像黑板,写满了草稿,擦掉就没了。”
  3. 硬盘(HDD/SSD):
    • 角色:长期存储数据的“档案室”,比如照片、视频、文档。
    • 特点:读写慢,但断电不丢数据(SSD比HDD快,但更贵)。
    • 吐槽:“硬盘容量用TB计,但找文件时像在仓库翻箱倒柜……”
  4. 输入/输出设备:
    • 输入:键盘、鼠标、麦克风(给计算机“喂指令”)。
    • 输出:显示器、打印机、扬声器(计算机“交作业”)。
    • 吐槽:“触控屏既是输入也是输出,计算机:我自给自足!”
🚀 计算机的“工作流程”

以“打开Word写论文”为例:

  1. 输入:你双击Word图标(鼠标点击被翻译成电信号)。
  2. 加载:CPU从硬盘调取Word程序,加载到内存。
  3. 运行:CPU逐行执行代码(比如显示菜单栏、工具栏)。
  4. 交互:你打字,CPU实时处理(比如显示文字、自动保存)。
  5. 输出:你保存文档,CPU将数据写回硬盘。

崩溃瞬间

  • “Word卡死?CPU正在满负荷运行,内存被占满,硬盘疯狂读写……”
  • “自动保存失败?可能是硬盘罢工,或者内存不够用了!”
🧠 计算机的“思维模式”:二进制

计算机只认0和1,但如何表示复杂信息?

  • 编码规则:
    • 字母、数字、符号被翻译成二进制码(比如A01000001)。
    • 图片、视频被拆解成像素点,每个像素用二进制表示颜色和位置。
  • 吐槽:“你发给朋友的表情包,在计算机眼里是0101的数字海啸!”
💡 关键原理:冯·诺依曼结构

现代计算机都遵循**“存储程序”**理念:

  1. 程序和数据一起存放在内存中。
  2. CPU按顺序读取指令并执行。
  3. 通过输入/输出设备与人交互。

比喻
“就像你做饭:菜谱(程序)和食材(数据)都在厨房(内存),你(CPU)按步骤操作,最后端菜上桌(输出)。”

📌 本节总结
  1. 计算机是“分工明确的团队”,CPU算数、内存暂存、硬盘长存、输入输出设备沟通。
  2. 工作流程:输入→加载→运行→交互→输出。
  3. 底层逻辑是二进制,但通过编码和冯·诺依曼结构,能处理复杂任务。
📒 1.4 编程语言的作用 —— 人类与计算机的“翻译官”修炼手册
🤖 编程语言是什么?

编程语言就是人类和计算机之间的“翻译官”,让你能用“人话”指挥计算机干活,而不是对它喊“010101”的二进制密码。

  • 核心使命:把人类能理解的代码,翻译成计算机能执行的机器码。
  • 进化史:
    • 机器语言:直接写0和1(计算机:“我听懂了!” 人类:“我瞎了……”)
    • 汇编语言:用MOV AX, BX代替01(稍微友好,但依然像天书)
    • 高级语言:C、Python、Java(终于能说人话了!比如print("Hello")

吐槽
“学编程语言,本质是在学如何优雅地‘驯服’一个铁憨憨(计算机)!”

💡 编程语言的三大核心作用
1. 抽象化:让计算机“听懂人话”
  • 底层逻辑:计算机只认 0/1 和电路开关,但人类不可能直接操作这些。

  • 解决方案:

    ​ 编程语言提供“语法糖”,比如:

    • int a = 5; 代替一堆二进制位操作。
    • if (a > 0) 代替复杂的电路跳转逻辑。
  • 比喻
    “编程语言像极了你的手机输入法,自动把‘nmsl’翻译成‘你萌死了’(误)。”

2. 效率提升:从“手搓代码”到“乐高式开发”
  • 模块化:把重复代码封装成函数/类,像搭乐高一样复用。
    • 例如:写一个add(a, b)函数,以后直接调用,不用重复写a + b
  • 库与框架:别人写好的轮子,你直接拿来用。
    • 例如:用Python的 pandas 库处理数据,比手写算法快100倍。
  • 吐槽
    “不会用库的程序员,就像不会用洗衣机的原始人——纯手搓代码,累死自己!”
3. 跨平台与领域适配:一门语言走天下
  • 跨平台:比如 Java 的“一次编写,到处运行”(Write Once, Run Anywhere)。
    • 例子:用 Java 写的游戏,能在 Windows、Mac、安卓上跑。
  • 领域适配:不同语言擅长不同领域。
    • C语言:操作系统、嵌入式开发(贴近硬件,效率高)。
    • Python:数据分析、AI(库多,语法简单)。
    • JavaScript:网页交互(浏览器原生支持)。
  • 比喻
    “编程语言像工具箱里的螺丝刀,有的适合拧细螺丝(Python),有的适合撬地板(C语言)。”
🎮 编程语言的“隐藏技能”
1. 思维训练:计算思维养成记
  • 写代码像解谜题:如何把复杂问题拆解成计算机能执行的步骤?
    • 例子:用循环结构批量处理数据,比手动操作快 100 倍。
  • 吐槽
    “学编程后,我看世界的方式都变了——连等电梯都在想‘这是不是个队列结构?’”
2. 创意实现:从“脑洞”到“现实”
  • 编程语言是“魔法棒”,能把想法变成可交互的产品。
    • 例子:用 Python 写个爬虫抓取全网表情包,或用 Unity+C# 开发独立游戏。
  • 比喻
    “不会编程的创意人,就像有菜谱但没锅的厨师——空有一肚子想法,做不出菜!”
3. 职业赋能:从“打工人”到“技术大佬”
  • 编程语言是“职场硬通货”,能解锁高薪岗位。
    • 例子:会 Python 的数据分析师比只会 Excel 的薪资高 30%。
  • 吐槽
    “HR:‘你会 Java 吗?’ 我:‘会一点点……’ HR:‘恭喜,你被录取了!’(其实我只会写 Hello World)”
📌 本节总结
  1. 编程语言是人类与计算机的翻译官,让“人话”变“机语”。
  2. 核心作用:抽象化硬件、提升效率、适配不同场景。
  3. 隐藏价值:训练思维、实现创意、赋能职业。

2 计算机的思维方式:重复是计算机最擅长的

计算机就像一个有强迫症的流水线工人,只擅长做一件事——重复执行指令

📒 2.1 计算机的思维方式 —— 从“机械执行”到“逻辑推理”的进化论
🤖 计算机的“底层逻辑”:二进制与逻辑门

计算机的思维方式,本质上是二进制与逻辑运算的“机械舞蹈”

  • 二进制:所有信息(文字、图片、声音)都被翻译成0和1的组合。
    • 例如:字母 A 在ASCII码中是01000001
  • 逻辑门:通过与、或、非等基本操作,实现复杂计算。
    • 例如:与门(AND)只有当两个输入都为1时,输出才为1。

吐槽
“计算机的‘大脑’里没有‘可能’‘大概’这些词,只有‘是’或‘否’的绝对判断!”

🧠 算法思维:解决问题的“套路大全”

算法是计算机解决问题的“套路”,核心是将问题拆解为可重复的步骤

  • 经典算法案例:
    • 排序算法:冒泡排序、快速排序(比谁更快把数字排好队)。
    • 搜索算法:二分查找、广度优先搜索(比谁更快找到目标)。
  • 算法思维的特点:
    • 确定性:每一步都明确,没有歧义。
    • 有限性:必须在有限步骤内结束。
    • 有效性:每一步都能被计算机执行。

比喻
“算法就像菜谱,步骤错了,菜就‘翻车’(比如把糖和盐搞混)!”

🚀 计算机的“超能力”:并行与批量处理

计算机最擅长的,是同时处理大量重复任务

  • 并行计算:
    • 多核 CPU/GPU 同时处理不同任务(比如一边渲染视频,一边解压文件)。
      • 例子:用 CUDA 并行计算矩阵乘法,速度提升几十倍。
  • 批量处理:
    • 一次性处理海量数据(比如用循环给10万张图片加水印)。
      • 例子:大数据分析中,用 MapReduce 框架批量处理日志。

吐槽
“并行计算像开挂,但挂开太大可能崩溃(比如内存不足)……”

⚠️ 计算机的“局限性”:没有“常识”,只有“规则”

计算机的思维方式,也决定了它的局限性

  • 无法理解“常识”:
    • 例子:对计算机说“把大象装进冰箱”,它可能真的会尝试物理操作,而不是分步骤(打开门→放大象→关门)。
  • 依赖明确指令:
    • 例子:自动驾驶汽车需要精确的地图和规则,遇到未标注的障碍物可能“懵逼”。

吐槽
“计算机就像一个‘钢铁直男’,你告诉他‘多喝热水’,他真的会去烧水,而不是关心你生病了……”

🔮 计算机思维的“进化”:从规则到学习

近年来,人工智能让计算机开始模仿人类的“模糊思维”

  • 机器学习:
    • 通过大量数据“学习”规律(比如识别猫狗图片)。
    • 例子:AlphaGo 通过自我对弈,学会了人类从未想过的棋路。
  • 深度学习:
    • 用神经网络模拟人脑(但本质仍是矩阵运算和优化算法)。
    • 例子:GPT-4 能写诗、编代码,但依然可能“一本正经地胡说八道”。

吐槽
“AI像‘学霸’,考试能拿满分,但不知道‘1+1为什么等于2’……”

📌 本节总结
  1. 底层逻辑:二进制+逻辑门,计算机的“机械舞蹈”。
  2. 算法思维:拆解问题为可重复步骤,确定性、有限性、有效性。
  3. 超能力:并行+批量处理,效率起飞。
  4. 局限性:依赖明确规则,无法理解“常识”。
  5. 进化方向:AI让计算机开始“模糊思考”,但本质仍是优化算法。
📒 2.2 解释执行与编译执行:程序员的“翻译官”之争
🤔 核心问题:代码怎么变成计算机能懂的“话”?

想象一下,你写了一行代码print("Hello World"),计算机是怎么看懂并执行的?
这背后有两种“翻译官”在打架:解释器编译器

🔄 解释执行:逐行“翻译”,现场表演

解释器就像同声传译,你写一句代码,它“翻译”一句,计算机立刻执行。

  • 工作流程:
    1. 读取源代码→2. 逐行“翻译”成机器码→3. 立即执行→4. 重复直到程序结束。
  • 特点:
    • 即时反馈:改完代码马上运行,适合调试(比如 Python 的交互模式)。
    • 跨平台性强:只要安装对应解释器,代码就能跑(比如 Python 代码在Windows/Mac/Linux 通用)。
    • 效率较低:每次运行都要“翻译”,相同代码比编译执行慢。
  • 典型语言:Python、JavaScript、Ruby。

吐槽
“解释执行像‘边吃饭边做饭’,吃一口做一口,慢是慢点,但随时能改菜单!”

⚡️ 编译执行:一次性“翻译”,电影上映

编译器就像电影导演,先把剧本(代码)完整“翻译”成电影(机器码),再“上映”(执行)。

  • 工作流程:
    1. 读取全部源代码→2. 整体“翻译”成机器码→3. 生成可执行文件→4. 运行可执行文件。
  • 特点:
    • 执行快:一次“翻译”,多次运行,适合大型项目(比如 C 语言写的操作系统)。
    • 平台相关:编译后的机器码只能在特定平台运行(比如 Windows 的 .exe 文件不能在 Mac 直接运行)。
    • 调试麻烦:改完代码需要重新编译,才能看到效果。
  • 典型语言:C、C++、Rust。

吐槽
“编译执行像‘先拍完电影再上映’,前期投入大,但票房(执行效率)可能更高!”

🆚 解释执行 vs 编译执行:一场没有胜负的战争
对比项解释执行编译执行
执行速度慢(逐行翻译)快(一次翻译,多次运行)
跨平台性强(有解释器就能跑)弱(机器码依赖平台)
调试体验好(改完马上运行)差(需重新编译)
典型场景脚本语言、快速开发系统级编程、高性能需求
🌉 折中方案:JIT 编译

为了兼顾两者的优点,现代语言发明了**JIT(即时编译)**技术:

  • 工作流程:
    1. 解释执行代码→2. 记录热点代码(频繁运行的部分)→3. 将热点代码编译成机器码→4. 后续直接运行机器码。
  • 典型应用:
    • Java 的 JVM(Java 虚拟机)
    • JavaScript 的 V8 引擎(Chrome 浏览器)
  • 优势:
    • 冷启动快(初始解释执行)
    • 长期运行效率高(热点代码编译)

吐槽
“JIT 像‘外卖平台’,先接单再优化路线,送得越多越快!”

📌 本节总结
  1. 解释执行:逐行翻译,即时反馈,适合脚本语言。
  2. 编译执行:一次性翻译,执行快,适合系统级编程。
  3. JIT编译:折中方案,兼顾冷启动和长期效率。

3 为什么学 C 语言:C 语言在工业界有重要地位,在很多领域无可替代

📒3.1 C语言在工业界的地位:底层霸主与跨平台王者
🏆 工业界的“底层基建”:操作系统与嵌入式开发

C 语言是操作系统内核开发的“官方语言”,Linux、Windows、macOS 等系统的核心代码均由 C 语言编写。其底层控制能力体现在:

  • 硬件直连:通过指针直接操作内存和硬件寄存器,实现精准控制(如驱动开发)。
  • 性能极致:编译后的代码执行效率接近汇编语言,适合对性能要求极高的场景(如云服务器内核)。
  • 跨平台统治:从嵌入式设备到超级计算机,C语言代码只需少量修改即可移植,成为跨平台开发的基石。

案例

  • 汽车电子:发动机控制单元(ECU)用C语言编写,确保实时响应油门、刹车等指令。
  • 物联网:智能家居设备(如智能灯泡)的固件用C语言开发,在资源受限环境下实现高效通信。
🔧 工业控制的“瑞士军刀”:PLC 与机器人编程

在工业自动化领域,C 语言是可编程逻辑控制器(PLC)编程的主力语言,其优势包括:

  • 实时控制:通过多线程技术实现传感器数据采集、设备协同和故障监测(如汽车生产线机械臂同步)。
  • 硬件适配:直接读写 I/O 端口,控制电机、阀门等设备的开关和速度。
  • 可靠性:代码经过严格测试,可连续运行数年无故障(如化工厂反应釜控制)。

对比PLC专用语言

  • 灵活性:C 语言支持复杂逻辑和算法,而 PLC 梯形图仅适合简单逻辑。
  • 扩展性:C 语言可调用外部库(如数学计算库),而 PLC 语言功能受限。
🚀 高性能计算的“隐形冠军”

在科学计算和人工智能领域,C 语言是底层库的“建造者”

  • 基础库:BLAS、LAPACK 等线性代数库用 C 语言编写,为 Python/MATLAB 等高级语言提供性能支撑。
  • 硬件加速:通过 CUDA C(针对GPU)和OpenCL C(针对异构计算),实现深度学习模型的训练加速。

数据

  • 全球 Top500 超算中,90% 以上使用 C 语言编写的操作系统和并行计算框架。
🔄 现代工业的“粘合剂”:跨语言协作

C语言通过 **FFI(外部函数接口)**与现代语言无缝协作:

  • Python+C:用 C 语言编写高性能计算核心,Python 调用以实现快速开发(如数据分析库Pandas)。
  • Rust+C:Rust 的安全特性与 C 语言的性能结合,用于开发区块链底层系统。
🛡️ 安全性升级:从“野蛮生长”到“防御编程”

针对缓冲区溢出等历史问题,C语言通过以下方式强化安全性:

  • 工具链:静态分析工具(如 Clang-Tidy)在编译阶段检测内存泄漏。
  • 标准演进:C23 标准引入安全函数(如 strcpy_s 替代不安全的 strcpy)。
📌 本节总结
  1. 底层霸主:操作系统、嵌入式、工业控制等领域不可替代。
  2. 性能标杆:高频交易、实时系统、科学计算的首选语言。
  3. 跨平台王者:从单片机到数据中心,一套代码通吃。
  4. 生态粘合剂:通过FFI与现代语言协作,拓展应用边界。

未来趋势

  • C23标准:增强 Unicode 支持、简化嵌入式开发。
  • 硬件融合:与 GPU/FPGA 深度整合,主导异构计算时代。

C 语言就像工业界的“内功心法”,虽不显眼,但所有“招式”(应用)都需依赖其运行。学通 C 语言,方知计算机底层逻辑之精妙!

📒3.2 语言的库对其重要性的影响:编程世界的“生态战争”
🔍 库:编程语言的“武器库”与“弹药”

如果说编程语言是“武器”,那么库就是“弹药”——没有弹药,武器只是摆设。库对语言的重要性,体现在以下层面:

🚀 1. 开发效率:用库“拼乐高”,不用“手搓零件”
  • 代码复用:库封装了通用功能(如网络请求、数据解析),开发者无需重复造轮子。
    • 例如:Python的 requests 库,三行代码就能发送 HTTP 请求,而无需手动处理 TCP/IP 协议。
  • 抽象层级:库将底层细节(如内存管理)隐藏,开发者可聚焦业务逻辑。
    • 例如:JavaScript 的 React 库,用组件化开发替代手动操作 DOM,效率提升数倍。

对比

  • 有库:写一个 Web 应用,只需调用 Flask/Django 的路由、模板引擎。
  • 无库:需手动解析 HTTP 请求、渲染 HTML,代码量暴增 10 倍。
🔧 2. 生态壁垒:得库者得天下
  • 语言竞争:库的数量和质量,直接影响语言的适用场景。
    • 例如:Python 因 NumPy/Pandas 成为数据科学首选,而PHP因 Laravel/Symfony 称霸 Web 开发。
  • 社区活力:活跃的开源社区能持续输出高质量库,形成“马太效应”。
    • 例如:JavaScript 的 npm 仓库拥有百万级库,远超其他语言。

数据

  • Python的 PyPI 仓库有 40万+库,覆盖 AI、Web、自动化等领域。
  • Rust的 crates.io 仓库虽小(7万+库),但质量极高,吸引系统级开发者。
🌐 3. 适用场景:库决定语言的“能力边界”
  • 领域专用库:将语言锚定在特定场景。
    • 例如:
      • TensorFlow/PyTorch 让 Python 成为 AI “官方语言”。
      • Unity/Unreal Engine的 C#库 让游戏开发更高效。
  • 跨平台库:扩展语言的覆盖范围。
    • 例如:
      • Electron 库让 JavaScript 能开发桌面应用(如VS Code)。
      • Flutter 库让 Dart 语言能开发跨平台移动应用。

案例

  • Julia语言:因科学计算库不足,虽性能媲美 C,但普及度远低于 Python。
  • Go语言:凭 goroutine+channel 库,成为并发编程首选(如 Docker/Kubernetes)。
⚠️ 4. 库的“双刃剑”效应
  • 依赖风险:过度依赖第三方库可能导致:
    • 安全漏洞:如 left-pad 事件,一个库下架导致整个 npm 生态瘫痪。
    • 兼容性问题:库版本升级可能破坏现有代码(如 Python 2→3 的兼容性问题)。
  • 学习成本:库的多样性虽好,但选择困难症和 API 差异可能增加学习负担。

吐槽
“学 Python 像‘点菜’,库太多反而不知道选哪个;学 Rust 像‘组装家具’,库虽少但每个都精工细作。”

📌 本节总结
  1. 开发效率:库是“代码复用”的载体,减少重复劳动。
  2. 生态壁垒:库的数量/质量决定语言竞争力,形成“马太效应”。
  3. 适用场景:领域专用库锚定语言定位,跨平台库扩展能力边界。
  4. 双刃剑:依赖风险与学习成本需权衡。

未来趋势

  • AI辅助选库:用 AI 推荐最适合的库(如GitHub Copilot)。
  • 模块联邦:WebAssembly 让不同语言的库能跨语言调用(如 Python 调用 Rust 库)。

语言的库生态,是开发者“用脚投票”的结果。选语言前,先看它的“武器库”是否够硬核!

4 关于 C 语言和版本的历史

📒4.1 C语言起源与发展:从UNIX内核到现代工业的编程语言传奇
🌱 起源:为UNIX而生的“技术革命”
  • 诞生背景
    1969年,贝尔实验室的肯·汤普逊(Ken Thompson)为开发 UNIX 操作系统,急需一种高效且能直接操作硬件的语言。B 语言因功能不足(如无数据类型)被改造,1972 年,丹尼斯·里奇(Dennis Ritchie)在 B 语言基础上设计出 C 语言,结合了 BCPL 的简洁性与硬件级控制能力。
  • 早期设计哲学:
    • “信任程序员”:赋予开发者直接操作内存、指针等底层资源的能力。
    • 跨平台性:通过编译器适配不同硬件,而非修改代码本身。
📚 发展:从“K&R标准”到国际化演进
  • 1978年:K&R C的诞生
    里奇与布莱恩·科尔尼汉(Brian Kernighan)合著《The C Programming Language》,确立 C 语言语法规范,成为事实标准(K&R C)。书中经典代码如 Hello World 和递归斐波那契数列,至今仍为教学范本。
  • 标准化进程
    • ANSI C(C89):1983 年 ANSI 成立委员会,1989 年发布首个官方标准,解决不同厂商 C 语言实现差异问题。
    • ISO C(C90):1990 年 ISO 采纳 ANSI C 为国际标准,推动 C 语言全球化普及。
    • C99/C11/C17/C23:持续引入新特性(如变长数组、多线程支持、安全函数),保持语言现代性。
🔧 技术特性:高效与灵活的“双刃剑”
  • 底层控制
    通过指针直接操作内存,实现硬件级优化(如驱动开发、实时系统)。
  • 跨平台兼容
    代码可移植性极强,从嵌入式微控制器到超级计算机均能编译运行。
  • 模块化设计
    函数与结构体支持复杂系统开发,同时保持语法简洁性。
🏭 工业应用:现代科技的“隐形支柱”
  • 操作系统开发
    UNIX/Linux 内核、Windows/macOS 系统组件均由 C 语言编写,确保性能与稳定性。
  • 嵌入式系统
    汽车电子(如ECU)、物联网设备(如智能家电)的固件依赖 C 语言实现高效资源管理。
  • 工业控制
    PLC 编程、机器人控制(如机械臂协同)利用 C 语言多线程技术满足实时性需求。
  • 游戏与数据库
    Unity 游戏引擎底层、MySQL 数据库核心均基于 C 语言开发,兼顾速度与可靠性。
🌍 影响与传承:从 C 到现代编程语言生态
  • 语言基因传承
    C++、Java、Python 等语言均继承C的语法结构(如循环、条件语句)和设计哲学(如指针概念)。
  • 开源生态基石
    Linux 内核、GNU 工具链等项目通过 C 语言实现跨平台协作,奠定开源软件基础。
📌 本节总结
  1. 起源:为 UNIX 开发而生,融合 BCPL/B 语言特性,1972 年正式诞生。
  2. 标准化:从 K&R C到 C23,持续演进以适应现代计算需求。
  3. 技术优势:底层控制、跨平台性、模块化设计构成其核心竞争力。
  4. 工业地位:操作系统、嵌入式、工业控制等领域不可替代的基础设施。

未来趋势

  • C23标准:强化安全性(如边界检查)、支持 Unicode,拓展新兴领域应用。
  • 硬件融合:与 RISC-V、AI 加速器深度整合,主导边缘计算与异构编程时代。

C 语言不仅是编程语言,更是计算机科学的“活化石”。它的设计哲学与技术演进,持续塑造着现代科技的面貌。

5 环境安装:Visual C _2010_学习版_离线包(2025年全国计算机二级 C 语言考试官方指定版本)和 Microsoft Visual Studio

第一个是考试用的,第二个是个人学习用的

⚠️ 重要前提
  1. 版本匹配:
    • Visual C++ 2010 学习版:需安装 Microsoft Visual C++ 2010 Express(官方离线包)。
    • Microsoft Visual Studio:建议安装 VS 2019/2022 社区版(兼容C语言开发,需手动配置C语言项目模板)。
  2. 系统兼容性:
    • Windows 7/8/10/11 均支持,但需以管理员权限运行安装程序。
    • 禁用实时防护(如Windows Defender)以避免安装包被误删。

🔧 安装步骤
第一步:安装 Visual C++ 2010 学习版
  1. 下载离线包:
    • 百度网盘:Visual Studio 2010 Express 下载
    • 选择 Visual C++ 2010 学习版(文件约420MB),保存至本地。
  2. 安装流程:
    • Visual C++ 2010 Express 下载及详细图文安装教程(VC2010)-CSDN博客

第二步:安装 Microsoft Visual Studio(以VS 2022为例)
  1. 下载安装程序:
    • 访问官网:Visual Studio 2022 社区版
    • 选择 “免费下载”
  2. 安装流程:
    • Visual Studio Community 2022 最详细的安装教程-CSDN博客

📌 提示:建议优先使用 Visual Studio 2022 开发,仅在考试前切换至 Visual C++ 2010 适应环境,避免长期使用旧版IDE导致功能缺失。

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

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

相关文章

服务器修改/home的挂载路径

写在前面:前段时间新装了一台服务器,/home目录原本是挂在在系统盘/dev/sda4的分区下,但是系统盘的空间比较小,为了保证后续使用起来,不会遇到磁盘很快就占满的情况,现在需要将 /home 独立出来,挂…

刷机维修进阶教程-----没有开启usb调试 如何在锁定机型的拨号界面特殊手段来开启ADB

有时候我们会遇到一些机型被屏幕锁 账号锁等锁定。无法进入系统界面。也没有开启usb调试的情况下如何通过一些操作来开启adb调试。然后通过adb指令来禁用对应的app顺利进入系统。以此来操作保数据等操作. 通过博文了解💝💝💝 1💝💝💝----了解一些品牌机型锁定状态…

虚拟文件(VFS)

核心知识点:虚拟文件系统(VFS) 1. 通俗易懂的解释 想象一下你家里的冰箱。你把食物放进去,不用管它是放在塑料盒里、玻璃罐里还是直接用保鲜膜包着,你只需要知道它在冰箱的哪个位置(比如“蔬菜抽屉里”&a…

前后端联调实战指南:Axios拦截器、CORS与JWT身份验证全解析

前言 在现代Web开发中,前后端分离架构已成为主流,而前后端联调则是开发过程中不可避免的关键环节。本文将深入探讨前后端联调中的三大核心技术:Axios拦截器的灵活运用、CORS跨域问题的全面解决方案以及JWT身份验证的安全实现。通过本文&…

Postman基础操作

1.Postman是什么? Postman是接口测试的工具,简单来说它能模拟浏览器对服务器的某个接口发起请求并接收响应数据。 1.1 Postman工作原理 2.Postman发送请求 2.1 发送GET请求 我们知道GET请求是没用请求体的,所以我们需要将请求参数写在Param…

Elasticsearch Synthetic _source

_source 字段包含索引时传入的原始 JSON 文档体。_source 字段本身不被索引(因此不可搜索),但会被存储,以便在执行获取请求(如 get 或 search)时返回。 如果磁盘使用很重要,可以考虑以下选项&a…

Vue3 + Element Plus 实现用户管理模块

本文介绍一个使用 Vue3 Element Plus 实现的用户与小组管理模块,支持用户的增删改查(CRUD)和分页管理,以及小组的新增和删除功能,适用于管理后台系统中的用户权限管理场景。 一、项目简介 该模块具备以下功能&#…

Python应用“面向对象”小练习

大家好!面向对象编程是一种以 “对象” 为核心的编程思想。对象可以看作是具有特定属性和行为的实体。例如,一个学生可以是一个对象,他的属性包括姓名和年龄,行为可以是打招呼。​ 代码呈现: # 定义类和对象 class Student:def __init__(sel…

线性回归原理推导与应用(八):逻辑回归二分类乳腺癌数据分类

乳腺癌数据是sklearn中自带的数据集,需要通过相关特征对是否患有乳腺癌进行分类。 数据清洗与建模 首先加载相关库和相关数据 from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression import numpy as np import…

nginx的一些配置的意思

1.用这个端口可以访问到nginx 2.工作进程,设置成和cpu核心数一样即可 3.每个工作进程的最大网络连接数。 4.主机名称 设置反向代理时,把server_name设置成ip。 5.反向代理进行转发,localhost指的是nginx所在的机器。 关键字proxy_pass。 …

SID103S/D/Q-300nA, 轨至轨, CMOS 运算放大器替代SGM8141

概述 SID103系列产品是专注于超低功耗、轨至轨、CMOS运算放大器,最低工作电压可以支持到1.4V,并且工作时每个通道仅消耗300nA的电流。特别适合穿戴式、独立式等对功耗敏感的电池供电场景。 SID103系列产品拥有5kHz的增益带宽积,外接500pF电…

十六进制字符转十进制算法

十六进制与十进制对照 十六进制十进制00112233445566778899A10B11C12D13E14F15 十六进制与十进制区别 十六进制是满16进1,十进制是满10进1,这里要注意下区别,16进制的字符里面为什么是0-9没有10,这里面进了一位,表示…

微软技术赋能:解锁开发、交互与数据潜力,共探未来创新路

在微软 Build 2025 大会以及创想未来峰会上,微软展示的一系列前沿技术与创新应用,不仅展现了其在科技领域的深厚底蕴与前瞻视野,更为开发者和企业带来了前所未有的机遇与变革动力。 领驭科技作为微软中国南区核心合作伙伴及 HKCSP 1T 首批授…

并发基础|进程与线程

进程基础 什么是进程? 为了实现并发的功能,引入了进程的概念。 ​ 为了实现并发,需要引入多程序的环境,但是多程序的环境会造成一些单程序时不存在的问题,比如程序的之间没有了封闭性,程序不可以连续的执…

鸿蒙仓颉开发语言实战教程:自定义tabbar

大家周末好呀,今天继续分享仓颉语言开发商城应用的实战教程,今天要做的是tabbar。 大家都知道ArkTs有Tabs和TabContent容器,能够实现上图的样式,满足基本的使用需求。而仓颉就不同了,它虽然也有这两个组件,…

LINUX526 回顾 配置ssh rsync定时备份(未完成)

配置SSH回顾: 1.关闭防火墙、selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUXdisable 2. 510 2.配置YUM源 我计划配本地yum源 2.1 yum源备份 cd /etc/yum.repos.d tar -zcf repo.tar.gz *.repo …

hdc - Mac本环境配置

1. 安装依赖工具 Homebrew 若未安装 Homebrew,打开终端执行: OpenJDK 11 HDC 依赖 Java 环境,安装 OpenJDK 11: 配置环境变量: 2. 安装 DevEco Studio 下载:从华为开发者联盟下载最新版 DevEco Studio。 …

项目三 - 任务8:实现词频统计功能

本项目旨在实现一个词频统计功能,通过读取文本文件并利用Java编程技巧处理和分析文本数据。首先,使用BufferedReader逐行读取文件内容,然后通过String.split(" ")方法将每行文本分割成单词数组。接下来,采用HashMap来存…

Python - 文件部分

- 第 101 篇 - Date: 2025 - 05 - 26 Author: 郑龙浩/仟墨 Python - 文件部分 学习时间: 2025-05-19 文章目录 Python - 文件部分一 文件与路径1 文本文件2 二进制文件3 编码格式① 常见编码格式② 指定编码格式③ 最佳格式④ 处理编码错误 4 绝对路径5 相对路径基本写法返回…

R语言开始绘图--柱状图

R语言是一种专门用于统计计算和图形显示的编程语言,广泛应用于数据分析、统计建模、数据可视化等领域。它由Ross Ihaka和Robert Gentleman于1993年在新西兰奥克兰大学开发,现已成为数据科学和统计学领域的重要工具。 R语言的特点 R语言具有丰富的统计和…