为啥要学习C语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥要学习C语言相关的知识,希望对你有一定的参考价值。

1.简约
虽说用好c语言很难,但是对于c语言的入门是很容易的,用一句话来形容c语言,我觉得是易于上手,难于精通,C语言在语法上的使用很简单,因为它不是很高级,也不是很庞大,在第二版(K&R)中,它的参考手册仅仅用了49页就描述了整个C语言,没有迭代器,没有装箱....C语言的这种“低级”让我们在学习时会把重点放在自己控制上,所以什么都会选择自己动手,而在用java或python时,我的第一感觉,往往是,“嗯,我有哪些工具可以使用?”太多的工具选择,有时候是件坏事,因为没了许多锻炼的机会,而且很难抓住重点,有的时候什么都没有反而是件好事。<!--more--
2,原理
操作系统是一个程序员应该学好的一门课,但是我们在学习的那些操作系统概念很难深入理解,或者比较抽象,比如饿死哲学家之类的,仅仅知道概念,是不能解决实际问题的,比如,你可能学过一些进程的概念,或者内存分段之类的,那我问你,windows进程问什么没有僵死?在windows中如何修改一个进程中的数据?Linux的fork和Windows的createProcess有什么不同?linux有线程吗?你写一个我看!你的理论不管用了,因为你没有实践过.所以,我觉得学习操作系统最好的方式就是用c语言进行系统调用,这种方式在unix和linux下能获得更好的学习方式,因为win32-sdk不适合学习,更适合开发,在unix下,你能用你的操作系统知识与fork(),exe(),wait()等系统调用很好的结合.
而且不仅仅是操作系统你,在学习c语言的时候,你不得不接触一些系统结构的知识,比如字节对齐,比如c语言的地址空间,你就会知道堆栈这种东西,如果不是递归,是可以没有的.你就会知道虚拟地址到实际地址的转换.这些在java和c#中变得透明,但是透明是为了方便开发,透明对一个学习者是有害的,想象今后的云计算,将会是怎样的开发?它将培养更多的码农。
3,数据结构与算法
用C语言来学习数据结构和算法在合适不过了,用指针去写吧,用Java和c#下的学习更像是会用。你可能会说C++更好,但是你的类(变量+函数)本质跟c语言中的结构体+函数,没有区别,除非你用模板,多态,重载,我才承认你在用c++,但是你的重点篇了,我们不是在讨论学习数据结构与算法吗?你现在是在学习语言特性了。
4,更好的过渡
本文所写的是为什么学习C语言,作为一个学生,我觉得说什么C语言开发更高效,就是个笑话,因为,谈到开发,又开始谈金钱,时间,一大堆的东西,你会问,为什么不是java或python?开发是开发的事,你学的扎实还不会开发?我只是说c语言的路线更适合学习,你又会问钱都挣不上学什么?我记得有一次一个来做java培训的人说,“我们培训java,你们把自己做成一个商品,推销出去。”。我觉得很可笑,我们要做的不是商品,最起码是一支股票。所以害怕学的东西找不到工作的人,用一切时间来犹豫徘徊。
参考技术A 学计算机知识。 参考技术B 是编程的基础 参考技术C 因为知识就是人民币 参考技术D 相对java等语言来讲,c是基础的,学c,可以更好的理解其他语言

在C语言进行编程中,为啥要释放旧内存?

hstring *sub
先声明了一个指针,我看别人的程序,为什么接下来就把这个指针的内存给释放了(if(sub->ch) free(sub->ch); /*释放旧空间*/),之后再使用malloc函数重新给它分配内存,为什么要这样做呢?不是多此一举吗?

我们老师说的是C++ 没有回收动态申请内存的机制。需要主动释放。JAVA等高级语言有这种机制。刚查了下貌似C++确实没有。
即是说C/C++ 都需要主动释放动态申请的内存。

试着解释下为什么要主动释放动态申请的内存:
1.动态申请的内存,存储在堆中,编译器不会自己回收,回收的意义:通俗讲就是告诉编译器,这片内存可以使用。
如果不被回收,这片内存就永远都不会被重新利用。也就是内存泄露。
例如 int *a=(int *)malloc (sizeof(int)*4);
2.现在只有a这个指针指向这片动态申请的内存,再没有别的路径可以找到这片内存空间了。如果在释放a所指向的内存空间之前就改变了a的指向,那么可知,这片内存,将不可能再被找到了。那么这片内存就不会被释放,也就是上面说到的内存泄露。
参考技术A 这样做是为了避免内存泄露,虽然你可能有好几个G的内存,虽然一次可能只泄露几个字节,多循环几趟总会把你内存用完的。这样写程序是一种良好的编程习惯。

就像,当你衣服脏了的时候,应该换一套干净的,而旧的衣服会拿去洗。
参考技术B 如果这个变量再很多地方要用到谁都不能保证自己记得上次有没有释放掉。因此就干脆用之前就判断原来的有没有释放掉来避免内存泄露。

说白了就是一种编程习惯,就像不管变量是不是常量都写成if(常量==变量)这样本回答被提问者采纳
参考技术C 内存不释放会.在短的运行时间不长的程序中不会造成很大的影响.但是在服务器中.长时间申请却不释放的内存会一直被分配.而在下一次调用函数时又会重新申请.这样长期积累下来.程序所使用的内存会慢慢累积.服务器内存资源会被消耗干净...

用完便释放内存.这是一个好的C语言程序员所必备的习惯...

以上是关于为啥要学习C语言的主要内容,如果未能解决你的问题,请参考以下文章

c语言输出数据类型时为啥要加双引号?

小弟我为啥要学习python

为啥要学习Golang?

.为啥c语言里有的变量要赋初值,有的变量不用赋。

学习C++需要先学C吗,为啥?

在C语言进行编程中,为啥要释放旧内存?