百科问答小站 logo
百科问答小站 font logo



刚上大一,C 语言压根听不懂怎么办? 第1页

  

user avatar   arrayJY 网友的相关建议: 
      

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),有兴趣的话可以去了解一下序列点这个概念。




  

相关话题

  C语言中指针与数组都可以用a[3]表示,那它们是不是相同? 
  有什么像a=a+b;b=a-b;a=a-b;这样的算法或者知识? 
  是 C++ 的发展进入了邪路,还是我写代码的姿势不正确? 
  malloc一次性最大能申请多大内存空间? 
  malloc一次性最大能申请多大内存空间? 
  为什么很多程序无法计算负数的立方根? 
  如何在在asp项目中正常调用非托管c++dll? 
  英语不好能学C语言和C++么? 
  libevent+rabbitmq 架构做高并发服务器可否? 
  c语言中,关于switch循环的这个疑问怎么解? 

前一个讨论
军国主义和法西斯主义在什么情况下可行?
下一个讨论
59式坦克的装甲防护与同时代其他坦克相比,处于怎样的水平?





© 2024-05-17 - tinynew.org. All Rights Reserved.
© 2024-05-17 - tinynew.org. 保留所有权利