从C语言项目谈编程
很多初学C语言的小伙伴,在学习之初并没有一个大概的概念,学习这门语言需要掌握多少知识点,怎么才算学的差不多?
C语言的精髓点在哪? 学到多少东西才能够达到做项目的标准?学习的时候需要注意哪些细节点?疑问太多以至于压得自己喘不过气来。
基本的数据操作,运算规则,常见程序结构设计
很多人觉得这么几点我都看了多少遍了,早就烂熟于心了。举个简单的例子,printf打印可能是最常使用的函数了,但是这个函数在真正大型工程中,很少直接去调用,为什么?
主要项目中涉及到封装的概念,什么时机加入打印在调试大型系统的时候,更容易定位问题,这些编程思维对于初学者来说很难接触到,也很难想到,任何复杂的事物都是由简单的细节环绕而成,在学习之初不要觉得这些很简单的数据操作很简单,要真正纳入自己的知识体系还是需要花点心思。可以在学习的时候,网上搜一些资料看这些数据操作以及运算规则是如何使用具体的场景中。
很多人初学者可能会有疑问觉得去哪里找这些代码去,世界软件发展了这么多年,最不缺的就是代码,在github或者开源中国里面代码多如牛毛。学习的对象也是数不胜数。有点扯远了,这触及到另外一个学习编程的步骤,学会看懂别人的代码,然后才能尝试写出优质的代码,知己知彼百战不殆。曾经听一个编码高手说过“技术这东西只要花的时间长,肯下功夫早晚都能搞定,只要进入状态了,什么方法都能想的出来”,看书学习也罢,看视频学习也罢,需要让自己插上联想的翅膀,把自己的思维境界打开。
说到运算规则,涉及到代码的格式的问题,那么就该要求一些基本的职业素养了,代码的格式,就该要求了。很多初学者觉得写的代码越高深,越让人看不懂才叫高手,有这种想法的趁早打住。大道至简,这四个字在任何时候都不过时。做的复杂逻辑混乱只能说明当初在设计的时候,没有彻底想明白,想明白了展示出来一般都比较舒坦平整。
指针,数组,结构体,枚举灵活运用
不要只看这几个字,几乎是C语言里面最精髓的代表。数组这个概念基本上还能理解透彻,说到指针这个应用场景太多,而且在什么项目中几乎都离不开指针的使用。变化无穷,会用的觉得其乐无穷,不懂的哭上天。
说到指针,不能不提到计算机专业开的另外一个课程,数据结构。数据结构就是原生数据或者组合数据的混合运用的一种规则集合。连接这些数据,将这些数据有机的串联在一起,指针起到非常关键的作用。经常见到初学者说数据结构和天书差不多,几乎看不懂,建议回炉好好学习指针,说到指针还是存在很多故事,在入门之初有幸遇到一位水平极高的老手带着,基本功扎实的不得了,记得有一次使用指针忘记初始化,这老手叹了口气,当年我每次用指针错一次,就被项目经理当众批评一次,后来再也不敢不初始化使用了,所以印象才能这么深刻,话说到这里刚入门的小白挨多少批评或者鄙视,是最正常不过的事情了,这对于编程界来说稀松平常。
结构体在项目中用的特别多,很多初学者觉得结构体都在教材的最后章节,觉得不是那么重要。其实结构体在一定层次上决定着软件的脉络框架。很多高手在设计模块的时候,不是急急忙忙的写代码,而是先把头文件里面的结构体设计出来,简单的来说就是把数据模型先搞起来。有个数据模型代码实现起来就比较轻松了。面向对象里面类的老祖宗就是结构体延伸来的。关于结构体如何赋值,包含着指针的情况下,如何赋值这些都是常见的初学者经常容易掉的坑。枚举一般用在罗列不同类别,存在多个相同功能的实物,搭配switch使用的很多,在这就不一一列举了。
函数的使用
函数是面向过程编程最基本的单位,任何C程序的运行都有函数的身影,因为程序的入口main就是一个函数,函数传值方式,调用方式(递归,回调)都是函数内在的表现。函数的里面又可以嵌套别的函数,使得程序慢慢变得复杂化,谈到如何学习函数,说到了数学不好是不是编程不好学。函数的编程基本因子,和数学里面的函数有一定的共性,但编程里面的含义引申的层次更多,数学在一定层面就是提供一个工具或者方法而已,函数的设计里面夹杂着诸多的编程思想。
检验一个程序员水平的高低可以简单让用函数实现一个相对复杂一些的功能,基本上就能看出编程思想掌握的深浅程度。不妨自己实现一个函数,检验下自己编程水准,函数的检验是面试里面必不可少的题目。
一个函数基本上代表一个小的模块,多个模块有机的组合形成一个系统。建议初学者在学习函数的时候,不要满足于会使用函数,还要让自己站的层次更高一点。这能决定自己是一个纯粹的执行者还是未来框架的设计者,不要觉得这些东西距离自己很远,慢慢的积累时间长了,慢慢也就从量变变成质变了。
对于内存和性能有少许的理解
内存和性能对于初学者来说,可能觉得很遥远,其实这两样东西贯穿整个编码界,检验软件功能最重要的两项指标,软件占用内存多少,运行时间长了会不会让系统变缓慢。同时开启在多个软件的时候,你设计的软件是不是变得很卡顿,这些都是大家平常在使用软件时候经常遇见的现象。当年的XP运行的多好,非要升级搞什么windows7或者windows10之类的,把电脑搞的卡的要死。这其实是微软操作系统设计理念的一个延伸,用空间换时间。说的通俗点,提前把一些常见的软件加载到内存里面,使用的时候流畅度会感觉好一些,理念这么好,为啥还变得这么卡慢,主要机器配置太低了。微软这帮大佬认为你机器内存和CPU还是相当不错的,因为现在硬件成本基本上接近白菜价了。在机器配置还不错的情况下,windows7,10运行的速度还是很不错的。透过这些生活常识,归结对编程,对编码的认知程度上,慢慢就会建立起自己的知识体系。
这点在嵌入式设备上表现的很明显,一般嵌入式设备内存和cpu配置不是高,内存就要省着点用,占用CPU很高的一些函数尽量少去调用,避开雷区,这些经验就要靠平时多去积累,多去思考,才会融入自己的知识体系,才会慢慢认识到写代码其实在编程时候,只占很小的一部分,大部分的时间还是在思考如何让代码更加利索,内存更少的去使用,cpu占用率低一些。认识到这些时候,层次就不一样了,就会越来越觉得设计思想的重要性了。
不要拘泥于语法的限制,编程语言服务于编程思想。学到了真正的编程思想,才叫货真价实的懂编程。
---恢复内容结束---
从C语言项目谈编程的更多相关文章
- C语言项目——工程化编程的案例分析
一.VSCode安装及环境配置 初始在Win下安装Mingw-w64/GCC 和 GDB,在VSCode下打开项目案例,发现在linktable中需要包含pthread头文件.此文件是基于Linux系 ...
- 【转】VxWorks中高精度实时时钟的实现及C语言汇编混合编程
最近一个项目中需要在VxWorks下使用一个高精度实时时钟,要求精度为1ms,溢 出时间大于5小时.VxWorks提供系统时钟,该时钟在操作系统启动后开始计数,精度为1个tick,可以通过tickGe ...
- C语言嵌入式系统编程修炼
C语言嵌入式系统编程修炼 2008-08-19 作者:宋宝华 来源:天极网 C语言嵌入式系统编程修炼之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程 ...
- C语言之基本编程思想与基本概念扫盲
前言:C语言是包含了很多编程的基本思想,理解C能够有助于理解其他高级语言,深刻理解编程很多基本思想:这对新手入门是有很多好处的,正所谓磨刀不误砍柴工,内功与基础修炼扎实了,才能开始盖高楼大厦. 这篇文 ...
- C语言 多文件编程
C语言 多文件编程 分文件编程 把函数声明放在头文件xxx.h中,在主函数中包含相应头文件 在头文件对应的xxx.c中实现xxx.h声明的函数 防止头文件重复包含 1.当一个项目比较大时,往往都是分文 ...
- curl库 c语言的curl 编程
c语言的curl 编程 [Linux@centos-64-min exercise]# gcc -Wall -o curltest curltest.c /tmp/ccosVANi.o: In fun ...
- 试读《JavaScript语言精髓与编程实践》
有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖 ...
- Go语言项目的错误和异常管理 via 达达
Go语言项目的错误和异常管理 最近连续遇到朋友问我项目里错误和异常管理的事情,之前也多次跟团队强调过错误和异常管理的一些概念,所以趁今天有动力就赶紧写一篇Go语言项目错误和异常管理的经验分享. 首先我 ...
- VS2012编写C语言项目
原文:VS2012编写C语言项目 这两天看了一下C语言方面的知识,大学的时候使用的Turbo C对于我来说已经是很久之前的事情了,编写C语言的还有VC++,不过这货在64的表现实现是很让人失望,还是用 ...
随机推荐
- Alpha-1
前言 失心疯病源1 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 今天完成了那些任务 10:00~13:00 OpenCV环境配置,Matlab工具包下载 15:40~17:1 ...
- tweenjs缓动算法使用小实例
这里的tweenjs不是依托于createjs的tewwnjs,而是一系列缓动算法集合.因为本身是算法,可以用在各个业务场景中,这也正是总结学习它的价值所在.tweenjs代码详情: /* * Twe ...
- pycharm/webstorm创建react项目
1.安装nodejs 2.安装reactapp依赖:npm install -g create-react-app 在pycharm/webstorm中选择react
- Oracle 11g 体系结构--数据字典
DD:存放数据库内部信息的地方,用于描述数据库内部的运行和管理情况. Oracle数据字典的名称由前缀和后缀组成,使用_连接,含义说明如下: dba_:包含数据库实例的所有对象信息 v$_:当前实例的 ...
- Java中关于 ArrayList 和 Map 的常用遍历方法 (学习笔记,便于以后查询)
一.学习ArrayList与Map时,关于常用遍历方法的记录如下: 二.附源码如下: package com.study.in.myself; import java.util.ArrayList; ...
- TCP/IP三次握手与四次握手
原文地址 http://blog.csdn.net/whuslei/article/details/6667471 http://blog.csdn.net/wo2niliye/article/det ...
- Activiti5工作流笔记二
流程变量 import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import org.activiti ...
- matlab padarray
功能:填充图像或填充数组 使用:B = padarray(A,padsize,padval,direction) A表示输入图像,B是填充后的图像,padsize给出了填充的行数和列数,通常用[r c ...
- hash 默认使用equal进行元素比较 防止元素重复
hash 默认使用equal进行元素比较 防止元素重复
- 【bzoj1821】[JSOI2010]Group 部落划分 Group Kruskal
题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成为谜团了——聪 ...