2020.3.16补充:本回答只针对计算机专业或热爱计算机的人,不适合计算机二级选手、未来不打算从事计算机相关职业和对计算机毫无兴趣的人。
如果你觉得学校的书看不懂(尤其是谭某某的书),换书,《C Primer Plus》不错,还看不懂?《啊哈!C》,给初中生看的。
如果你觉得老师不好,别听他的课,网课、Mooc、B站视频。
边看边写,一定要写。光瞪眼除了让你眼睛变大,一点用都没有。
不会就搜,搜不到就问,问同学问学长问老师问知乎大V。
放弃百度用Google,哪怕是Bing也行,扶墙是程序员必备技能,实在不行花点钱。
上Stackoverflow而不是CSDN,不懂英文有翻译软件,专业名词就那些,看多就记住了。(CSDN很多博客是复制粘贴来的,错误很多不说,连排版都没排好。)
不是非要在课堂上才能学C。
@vczh有一个三八理论:哪怕是你三本每天编程八小时也能成大神。
八小时做不到?折个半,四小时。四小时做不到?折个半,两小时。
你说你压根不喜欢写代码,两小时也做不到。
那你选计算机干嘛?
下面是一些吐槽。
来自某211院校老师的提问:
许多老师可能科研能力很强,但他特别喜欢教你茴香豆的茴有几种写法。
怎么判断好不好?9012年还在教VC6.0的,全是辣鸡。
另一个211院校的老师教C++时教人用 itoa() 这个函数。然后就有一批人死活编译不通过。
看看Stackoverflow上关于这个 itoa() 的回答:
This function is not defined in ANSI-C and is not part of C++, but is supported by some compilers.
C++都没有这个函数!
我怀疑很多高校(不是什么野鸡学校,而是包括许多985211)都在教VC6.0这门语言,对,这门语言,不然他们怎么能写出那么多只能在VC6.0上编译的代码……
选一个好教材,选一个好老师,只要你用心,你顶多有些地方不理解,不会“压根听不懂”。
单说C语言的语法,其实并不难,想想高中数学的程序框图,大概就是那些。难在背后的与计算机科学相关的内容。
比如,保存一个很大的数到int变量为什么会溢出、为什么控制台输出中文会乱码、指针是来干什么的为什么我们要用它、为什么我写了半天还是黑框框程序?
如果你没有遇到这些问题,那算你幸运。而一旦遇上了,随便一个问题就讲耗费你一整天甚至几天的时间来解决。甚至很多时候,你连你怎么解决的都不清楚,只是照着网上的教程那样做,这次成功了,下次遇到问题还是懵逼。
所以就有了下面这个问题:
事实上这些问题大多和C语言无关,比如乱码问题涉及到字符编码问题;不想写黑框框,想写图形界面,就要了解系统的消息机制以及界面绘制,这些大多都是大坑,一个问题够写一本书了。
换句话说,新手想要做出一些有成就感的东西来,是需要学习非常多的计科知识的。
但是,如果没有人跟你讲清楚这些东西,带你绕过这些坑,而你又只身潜入,那你很容易在刚开始就四处碰壁,进而泄气,甚至开始自暴自弃不想学了。
(小声BB:我在刚学会指针的那个晚上试图开始学Windows API,然后看着接近100行的Hello Win瑟瑟发抖( 逃
有大佬上来就让人抱着砖头一样的书啃(比如《算法导论》),大概这是大佬的学习方式吧,不适合我等凡人。我等凡人需要有成就感这样的东西支撑我们继续学下去,这也是许多人执着于图形界面的原因(因为直观)。
所以如果你学了基础语法之后,觉得缺乏动力学下去,你可以试试一些能快速做出成品的语言。比如Python,比如网页前端。如果你弄懂了C的语法,你去学其他语言的语法会觉得大同小异。
但是,不要因为他们绚丽就忘乎所以。这些美丽的东西背后都有着坚实而复杂的理论基础。比如网页的渲染的基础是浏览器,解析你HTML文本的是Parser,运行Python脚本的是解释器。
你可以用C来学习他们的原理。
对,C用来学原理。用C去写一些直观的东西可能会让你疯掉,但是用C实现那些底层的东西却很方便,但这已经是后话了,学到这个地步你应该都不会迷茫了。
20191008,今天上第一次上程序设计课,我又来吐槽一下……
我们老师开局先让我们新建一个工程,交作业的时候让我们把工程文件删了……喵喵喵?
我问老师说我们不能单文件编译吗?老师说:“我比较喜欢工程。”
虽然不用VC6.0,用的是Dev-C++,但是她的操作极度依赖IDE……没有知识体系,没有灵魂……
评论有人说,我说遇到不好的老师就不要听他的课是误人子弟。假如你遇到了这位老师,你认认真真照着她说的做,那你每次写代码都要仪式般的新建一个工程,然后再把工程删掉吗?
/ ******************/
这个故事告诉我们,写代码得动脑子。你得自己去了解:我想实现一个程序我需要做一些什么,我不需要做一些什么。比如IDE,无论它叫VC6.0还是Dev-C++,它就是个工具,你不用IDE也可以写代码,没必要把自己和IDE捆在一起。
你问我到哪了解呢?我是在知乎了解到这些的。比如知识体系的建立:
有人说知乎不适合用来学习,我觉得你可以去看那些无营养的推送,也可以的天天刚下飞机,你也可以关注一堆写专业回答的人,慢慢地啃回答,慢慢地写代码。
一夜之间多了许多关注,我受宠若惊,但我不是大神,我也是和大家一样的大一新生,也很少写回答,所以不建议大家关注我。
但你可以轻轻的走,只留下个赞。
/ ******************/
2020.3.16补充:
有很多人(++i)+(++i)+(++i)值到底是什么,我只能说这个问题不值得纠结。为什么不值得?因为正是一个未定义行为(Undefined behavior),有兴趣的话可以去了解一下序列点这个概念。