《你好,C语言》:从另一个视角学习并重新审视C语言的意义
《你好,C语言》:从另一个视角学习并重新审视C语言的意义
尽管C语言诞生了这么多年,但是它依然活跃在开发者一线,不可否认的是C语言的确有它独特的魅力。本文将从一个全新的视角,重新带领大家学习领悟C语言的奥秘,希望能给读者朋友一些思考和启发。
文章目录
- 1 写在前面
- 2 嵌入式10年后,我对C语言的看法
- 3 友情荐书《你好,C语言》
- 4 高质量的嵌入式C语言交流圈

1 写在前面
众所周知,C语言是一种通用的、面向过程的编程语言,它由Dennis Ritchie在1972年开发出来。
简洁高效、可移植性强、系统编程能力强、拥有强大的社区支持等特点,一直都是C语言的优势所在。
C语言的语法相对简单,提供了基本的数据类型和操作符,使得程序员能够直接控制硬件和内存。
它广泛应用于各类计算机平台,被视为一门可移植的语言。
C语言特别适合编写底层的软件,如操作系统、编译器和嵌入式系统。它的代码可扩展性强,能方便地扩展和重用。
然而,C语言没有内置的面向对象编程的支持,需要自己实现。
尽管如此,深入掌握C语言将为你打开系统级和高性能编程的大门,并为进一步学习其他编程语言打下坚实的基础。
2 嵌入式10年后,我对C语言的看法
熟悉我的朋友都知道,我从2013年开始入行接触和学习嵌入式,自打那个时候起,我就在使用C语言。到如今,已经超过整整10年了。
作为一个在嵌入式开发领域有超过10年工作经验的资深开发者,我对嵌入式C语言有着深刻的感受和看法。
大家都知道,作为嵌入式开发领域,C语言是我们常用的编程语言之一,它在嵌入式系统开发中发挥着重要的作用。C语言具有简洁高效的特点,语法相简单,能够直接访问底层硬件,并且代码运行效率高,这使得嵌入式系统的发更加灵活和高效。
另一方面,你不得不承认,C语言的可植性非常强,适应性广泛。无是单片机还是嵌入处理器,无论是不同的嵌入式操作系统,使用C语言都能够完成开发任务。这样可移植性极大地方便了我们在不同平台上进行嵌入式软件的开发和调试。
同时,由于嵌入式系统往往对资源的要求比较苛刻,对内存、功耗、存储等有严格限制,使得我在工作中深刻体验到了C语对内存管理的挑战。在嵌入式C语言开发中,我们需要仔细设计和优化代码,合理地使用指针和内存分配等机制,以确保系统资源的高效利用和性能的最大化。
就我个人的从业经验而言,我对嵌入式C语言持非常肯定的态度。它不仅简洁高效、可移植性强,还能够充分发挥嵌入式系统的性能适应不同平台的开发需求。
如果有什么需要我对入行嵌入式的开发者朋友想说的,那一定是:作为嵌入式开发人员,掌握好C语言是非常重要的技能,能够让更好地完成嵌入式系统的开发工作;如果你的C语言能力不过关,很有可能会限制你在嵌入式领域的技术进阶。
所以,C语言,学起来吧!
3 友情荐书《你好,C语言》
作为一个嵌入式开发者,我经常关注图书市场中有关C语言的出版图书,直到最近,我发现了一本非常有趣的技术图书,它就是《你好,C语言》。坦白来说,它能够让我重新审视到C语言的意义。
作者推荐
本书是一本经过精心设计和编写的C语言教程,内容涵盖C语言的基础语法和高级概念。作者致力于为读者提供一本入门型、简单易懂、条理清晰且轻快的C语言教程,另外作者利用独特的写作风格将基础的编程概念与C语言的细节很好地融合在一起,并通过大量贴近实际生活的示例同时演示一两个概念,循序渐进地带领读者探索学习C语言的乐趣,助力读者更好地掌握C语言的核心和程序设计原则。
内容简介
本书是一本全面介绍 C 语言的技术性书籍,旨在帮助读者深入了解 C 语言的基础知识和高级特性,以及它在实际项目中的应用。全书共 15 章,首先通过清晰易懂的语言,深入浅出地解释了C 语言的语法和编程原理,其次重点介绍了 C 语言的指针操作、内存管理、文件处理和模块化编程等关键概念。此外,本书还提供了主富的实例,帮助读者加深对 C 语言的理解,并通过实践锻炼读者解决实际问题的能力本书适合作为高等院校计算机科学及相关专业的教材和教学参考书,也可作为职业开发人员的自学用书和参考手册。无论是初学者还是有一定编程基础的开发人员,都可以从本书中获得实用的 C 语言编程知识和技能,提升自己在软件开发领域的能力。
作者简介
周圣杰:广州表达式科技有限公司的创始人,资深软件工程师,拥有多年的C/C++经验,尤其在桌面端开发、分布式后端和云原生运维方面经验丰富。
公司旗下拥有品牌【你好编程】,开创了中国动画视频教程的先河。其中《动画讲解C语言》和《C语言小游戏实战》课程以其精美的画面和高效简单的讲解方式深受学生喜爱和支持。这些课程的服务用户超4万。
林耿亮:毕业于武汉理工大学计算机科学与技术专业,广州表达式科技有限公司的联合创始人。经验丰富的软件工程师,专注于C语言编程和软件开发领域。
在多个软件项目中积累了丰富的经验,涉及领域包括Android开发、网络编程、数据结构和算法、图形编程等。
创作背景
创作背景
C语言作为一门功能强大的编程语言,具有广泛的应用领域和丰富的历史背景。在计算机科学的发展历程中,C语言被广泛用于系统级编程、嵌入式系统开发、操作系统设计以及高性能计算等领域。C语言简洁的语法结构和直接的硬件访问能力使它成为开发人员的首选。
C语言的诞生可以追溯到20世纪70年代,由丹尼斯·里奇(Dennis Ritchie)在贝尔实验室开发。随着时间的推移,C语言的影响力不断扩大。C语言不仅成为许多编程语言的基础,如C++和Objective-C,而且对于理解计算机底层原理和算法也具有重要意义。许多重要的软件项目,包括操作系统(如UNIX和Linux)、数据库管理系统和网络协议,都是使用C语言编写的。
在当前的技术环境下,C语言仍然是一门重要的编程语言。尽管有许多新兴的编程语言涌现出来,但C语言的底层控制和高性能计算能力使其在系统级开发和嵌入式系统中依然不可替代。对于那些想要深入了解计算机原理、进行底层编程和开发高性能应用程序的开发人员来说,掌握C语言是必不可少的基本技能。
本书的目的就是帮助读者系统地学习和掌握C语言的核心概念和高级特性。通过深入讲解C语言的语法、指针操作、内存管理和文件处理等重要知识点,本书旨在培养读者在C语言编程领域的能力和自信。通过丰富的示例和实践项目,读者将能够理解和应用C语言的各种技术,为自己的软件开发之路奠定坚实的基础。同时,本书将成为读者掌握C语言的重要参考资料和学习指南。
书本章节介绍
本书共15章,具体介绍如下。
第1章“初识C语言”,介绍C语言的背景和基本概念,向读者展示为何选择C语言进行编程。
第2章“C语言基础知识”,深入讲解C语言的语法和基本结构。
第3章“数据类型”,详细介绍C语言中的各种数据类型,包括整型、浮点型、字符型等,以及它们的特性和使用方法。
第4章“格式化输入和输出”,解释如何使用格式化字符串来实现输入和输出操作,包括格式化输出、格式化输入。
第5章“运算符和表达式”,介绍C语言中的各种运算符和表达式,包括算术运算符、关系运算符、逻辑运算符等。
第6章“控制流”,讲解C语言中的条件语句(如if语句和switch语句)和循环结构(如while循环和for循环),以及如何使用它们来控制程序的流程。
第7章“数组”,详细介绍C语言中的数组,包括一维数组和多维数组的定义、初始化和操作方法。
第8章“函数”,介绍如何定义和调用函数,以及函数参数的传递和返回值的处理。
第9章“指针”,深入讲解C语言中的指针概念和操作,包括指针的定义、指针运算、指针与数组的关系,以及指针的应用场景。
第10章“字符串”,介绍C语言中处理字符串的方法,包括字符串的定义、输入和输出、比较和处理字符串的函数库等。
第11章“复合数据”,讲解C语言中的结构体和联合体,以及如何定义和使用复合数据类型来组织和管理数据。
第12章“作用域和预处理器”,介绍C语言中的作用域规则和预处理器的使用方法,包括宏定义、条件编译和头文件的引用等。
第13章“多文件代码和存储类别”,介绍如何将程序分割成多个源文件,以及存储类别的概念和使用方法,包括全局变量和局部变量的作用域等。
第14章“文件操作”,讲解如何在C语言中进行文件的读写操作,包括文本文件和二进制文件的处理、文件指针的操作,以及文件的打开和关闭等。
第15章“位操作、动态内存管理和主函数参数”,深入探讨C语言中的位操作、动态内存管理和主函数参数的处理,以及相关的技巧和注意事项。
目标读者
本书适合广泛的读者群体,包括但不限于以下几类。
初学者:对C语言感兴趣或初步接触C语言的读者。本书从C语言基础知识入手,循序渐进地介绍C语言的核心概念和语法,帮助初学者建立扎实的编程基础。
学生和教育机构:本书作为高等院校计算机科学及相关专业的教材和教学参考书,可用于课堂教学和自主学习。
软件开发人员:已经具备编程经验的开发人员,尤其是对系统级编程、嵌入式系统开发或高性能计算感兴趣的开发人员。本书详细介绍C语言的高级特性和技巧,帮助开发人员提升其C语言编程水平。
自学者和技术爱好者:对C语言有浓厚兴趣,希望通过自学来掌握该语言的读者。本书提供清晰的解释、实用的示例和练习题,帮助自学者逐步理解和应用C语言的知识。
本书为读者提供了一个全面而深入的学习和参考资源,帮助读者掌握C语言的核心概念、高级特性和实际应用。
图书彩页简介
本书目前在京东等平台均有折扣,如果有感兴趣的读者朋友,欢迎点击 这里 自助下单。
4 高质量的嵌入式C语言交流圈
应广大粉丝的需求,特开放一个高质量的嵌入式C语言交流群,群里大多数是嵌入式相关领域的开发者朋友,也有不少是行业内的资深开发,每天我们都有不是嵌入式C语言的技术话题交流,如果你也对嵌入式C语言技术有着狂热的爱好,那么欢迎你加入这个圈子。
由于我需要保证圈子的高质量性,而不被外面的“不法分子” 破坏,所以在此我不便公开群二维码,有意向加入的朋友,请私信我。谢谢。
相关文章:

《你好,C语言》:从另一个视角学习并重新审视C语言的意义
《你好,C语言》:从另一个视角学习并重新审视C语言的意义 尽管C语言诞生了这么多年,但是它依然活跃在开发者一线,不可否认的是C语言的确有它独特的魅力。本文将从一个全新的视角,重新带领大家学习领悟C语言的奥秘&#…...

信创之国产浪潮电脑+统信UOS操作系统体验1:硬件及软件常规功能支持情况介绍
一、引言 由于公司要求支持国产信创,最近办公的笔记本电脑换成了软硬件全国产,由于国产操作系统是在开源linux基础上演进的,在换之前,非常担心操作不方便,周边应用软件少,功能差,内心是比较抗拒…...

JAVA学习-全网最详细
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...

基于物联网的农村地区智能微电网系统(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

JavaScript系列从入门到精通系列第九篇:JavaScript中赋值运算符和关系运算符以及Unicode编码介绍
一:赋值运算符 1: 右侧的值可以赋值给左侧的变量。 var a 123; console.log(a);//123 2: var a 10; a a 5; a 5; 上边这两个写法是一样的。 3:- var a 10; a a-5; a - 5; 上边这两个写法是一样的。 4:* …...
租用独立服务器有哪些常见的误区?
租用独立服务器有哪些常见的误区? 如今,租用独立服务器的市场随着idc行业良好的发展趋势而变得越来越广泛,其最明显的地方在于出现了许多的代理商,而成为代理商的门槛非常低,这样一来就会出现许多问题,导致…...
【学习笔记】POJ 3834 graph game
点这里 结论题😅 ,图一乐 结论:如果原图中存在两个边集不交的生成树,那么 Bob \text{Bob} Bob必胜;否则 Alice \text{Alice} Alice必胜 证明有点难😅 首先,考虑维护两颗 不存在红边 的生成树…...
无监督学习算法Kmeans
1. 有监督学习和无监督学习 在机器学习算法中,常把算法分为有监督学习和无监督学习两种。他们之间的区别主要在于输入数据集类型和学习目标。 (1)有监督学习:训练输入的数据需要带有标签,以便算法能够学习输入和输出…...

区块链(4):区块链技术模型介绍
1 区块链白皮书中的公有链,私有链,联盟链概念介绍 区块链系统根据应用场景和设计体系的不同,一般分为公有链、联盟 链和专有链(私有链)。其中: 公有链的各个节点可以自由加入和退出网络,并参加链上数据的读 写,运行时…...

go语言 rune 类型
ASCII 码只需要 7 bit 就能完整地表示,但只能表示英文字母在内的 128 个字符,为了表示世界上大部分的文字系统,发明了 Unicode ,它是 ASCII 的超集,包含世界上书写系统中存在的所有字符,并且为每个代码分配…...

DS18B20温度传感器
DS18B20简介 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线(单总线)”接口的温度传感器 这种一线总线就是 三线制 SPI DS18B20的 配置寄存器: TM 是测试位,出厂设置就被设置为0,不需要改动, R1、R…...
LeetCode322. 零钱兑换
322. 零钱兑换 文章目录 [322. 零钱兑换](https://leetcode.cn/problems/coin-change/)一、题目二、题解方法一:完全背包二维数组方法二:一维数组 三、注意 一、题目 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 a…...

AUTOSAR扫盲贴--不是黑神话【基本概念和方法论】
猴子纵有72搬变化,也跳不出如来的手掌 目录 1. 引言 2. AUTOSAR的基本概念 2.1. AUTOSAR的架构和组成部分 2.2. AUTOSAR的规范和...

python抠图(去水印)开源库lama-cleaner入门应用实践
1. 关于 Lama Cleaner Lama Cleaner 是由 SOTA AI 模型提供支持的免费开源图像修复工具。可以从图片中移除任何不需要的物体、缺陷和人,或者擦除并替换(powered by stable diffusion)图片上的任何东西。 特征: 完全免费开源&am…...

Nginx可视化管理工具结合cpolar实现远程访问内网服务
前言 Nginx Proxy Manager 是一个开源的反向代理工具,不需要了解太多 Nginx 或 Letsencrypt 的相关知识,即可快速将你的服务暴露到外部环境,并且支持 SSL 配置。基于 Tabler 的美观且安全的管理界面,无需了解 Nginx 即可轻松创建转发域、重定…...

CCC数字钥匙设计【BLE】 --建立安全测距
1、建立安全测距Establish Secure Ranging 车端总共有三种建立安全测距的方式,具体如下: 1) Optimal Flow 2) Sub-Optimal Flow 3) Ranging Recovery Flow 为了确定建立安全测距需要执行哪条流程,车辆需要进行以下流程选择。当车辆和设备…...
Ubuntu22.04 Opencv4.5.1 CPU和GPU编译攻略,Opencv CPU和GPU编译保姆教程 亲自测试。
1、安装opencv依赖 安装时最好更换一下源。 sudo apt-get -y update sudo apt-get -y install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get -y install libgtk-3-dev gfortran openexr libatlas-base-dev python3-dev pyt…...

常识判断 --- 党史
目录 中共1~3大 例题 国民党 例题 中共4~5大 例题 中共起义~会议 例题 中共六届六中全会(1938年9月) 中共七大(1945年4月) 例题 中共七届二中全会 例题 中共8~10大 中共11~12届全会 例题 中共13~14大 …...
Rust 基础再理解
Rust堆栈 Rust中各种类型的值默认都存储在栈中,除非显式地使用Box::new()将它们存放在堆上,但数据要存放在栈中,要求其数据类型的大小已知。对于静态大小的类型,可直接存储在栈上,如裸指针、布尔、字符、整数浮点数&a…...

Opencv cuda版本在ubuntu22.04中安装办法,解决Could NOT find CUDNN的办法
文章目录 概要下载cuda的runfile版本配置环境变量官网下载cudann安装Opencv依赖包下载opencv和opencv_contrib并解压准备编译安装anaconda环境执行编译命令安装OpenCV并检查是否安装成功 概要 解决以下安装问题: -- Could NOT find CUDNN: Found unsuitable versi…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...