数学问题
万事开头难,自学C语言最大的困难在于遇到问题不知道如何解决,还有不知道学到什么程度才能找到工作,这是自学编程语言最大的障碍,学到中间不知道什么时候是个头,遇到问题没有解决的途径,这是自学过程中遇到的最大问题,但这种不能归结为自学中遇到的难题,应该准确来讲是学习编程都会遇到的问题,和具体学习什么编程语言并没有太直接的关系,学习任何编程语言都会存在这种疑惑。
从事C语言编程开发已经有十几年,这门编程语言从入门的难易程度看并不是最难的,语法相对比较少,但C语言最大的特别是组合非常灵活多变,好多初学者学完基本的语法,觉得这门编程语言的代码应该都能看懂,曾经在学习初期学完语法之后去图书馆借了本linux内核解析去阅读,在开始阶段还是信心满满,结果看了几十页之后就开始有怀疑人生的感觉,又老老实实还回图书馆了,继续基础知识的学习之中了,C语言的理论掌握了距离真正的实践还是有很大的差距,实践是永远无法取代的过程。
C语言核心语法屈指可数,指针,函数,结构体,以及内存管理再加上常见的数据结构,说起来就是简单几句话的事情,但在实际过程中不断在实际操作中完成一个个编程场景的试验,不断在编程思路中填充编程脉络,就拿网络编程例子来讲,如果用C语言去完成需要对socket编程有所了解,socket编程属于操作系统的知识,编程的过程不仅仅是编程语言语法的问题,还会涉及到用户的使用习惯,以及编程的环境,常见的编程语言还有linux,windows,mac三种,不同的操作系统api的使用习惯也是不相同,编程语言的学习需要对编程环境有一个适应的阶段。
C语言的学习最快的方法就是直接在项目中实战,但是这种机会不是每个人都能涉猎到,参加培训的机构中也会竭尽全力在模拟这个过程,在自学的过程中也会不断的尝试在开源社区中寻找实战的味道,在真正项目实战中不断的总结经验,现在编程入门的门槛已经提升了许多,在十年前C语言学点基本的语法就能找到个工作去参与到实践中去,但现在已经没有那么好的机会了,这也是行业成熟进步的一种标记。
学习编程语言没有什么窍门,就是在实践过程中,不停的折腾摸索,遇到困难也是很正常的事情,保持一颗平常心,用不到两年的时间就能找到这门语言编程的感觉。C语言在嵌入式以及通信领域使用的比较多,安装一个linux系统在里面就可以找到很多实践的机会,很多linux命令底层的实现就是C语言,可以找这方面的资料去学习,在不断的学习过程中培养自己的学习兴趣,如果本身对于编程有兴趣可以继续保持,没有兴趣想办法培养兴趣,希望能帮打你。
大学生编程指南
c语言最大的难题是指针和内存,这是难倒众多新手的关键地方,指针本身其实不难,难的是在开发中指针的逻辑变化。
指针移动
int * ip = NULL;
ip += 1; // ip - NULL = 4
void * vp = NULL;
vp += 1; //编译错误!
指针转换移动
unsigned int i = 0;
unsigned char *p = (unsigned char *)&i;
*(p + 0) = 255;
*(p + 1) = 255;
*(p + 2) = 255;
*(p + 3) = 255;
指针指向内存边界
int arr[] = {0};
*(arr + 1) = 1314; //超出边界
arr++; //不允许++
堆栈内存问题
栈主要是用于逻辑计算、数据交换等,以及函数内定义的临时变量,这部分变量只会在当前作用域有效。堆内存通过malloc开辟,数据则是在一直存在,除非free和退出程序。
1、注意栈溢出,不要把内存开销大的结构定义在栈上,因为栈的空间很小。
2、注意被调函数变量分配,防止返回临时变量地址给外部操作。
多级指针难点
多级指针的互相操作很容易懵圈,需要一级一级的查找地址,特别要认真和细心。
野指针
int * i = (int *)malloc(sizeof(int));
free(i);
*i = 10;
野指针是致命问题,能够直接让程序崩溃。这只是一个简单的程序,当代码变得非常复杂的时候,容易出错的几率更大。
栈作用域(有问题)
char* getstr()
{
char str[] = "abc";
return str;
}
char * p = getstr();
常量区作用域(没问题)
char* getstr()
{
char * str = "abc";
return str;
}
char * p = getstr();
总结
c 和 c++固然难学,只要用心去学习和理解,终会学会的!
cpp架构
万事开头难,只怕有心人。只要你真正感兴趣,肯定能学好。
从一个大学学习过来人,和有几年编程工作经验者的角度讲讲我的经验。
我对题主问题的审题,理解题主可能是想学,没有人教,只能自学,但不知道方法,同时担心最难的地方搞不定。我来谈谈学习方法和最难的地方。
学习方法:买一本经典大学c语言教程(谭浩强版本),头一个月粗略读一遍,此一边不求完全看懂,只求对c语言编程有个全面了解。重点必须做的两件事情。
第一.每一章节中的程序代码一定要在电脑上抄一边,并且保证能正常运行,你会发现看不懂的东西,再敲代码的过程中就懂了。类似跟学自行车,学再多理论,比如实际去骑车,摔几次就会啦。也代码也是一样,你在调式代码的时候慢慢就理解了会写啦。
第二.把你不懂的知识点,在书本中圈出来,理解的要点不管对错都写下来(便于回头看的时候,对比纠正加深理解)。然后继续往后读,不要死盯一点不往前走。你会慢慢发现后面和前面有连贯的地方,也有不连贯的。回头再往前看,前面的知识其实很好理解。
在大学里面,读完一遍差不多一到两个月后,再精读一遍。
最难的知识点:指针是最难得,一维、二维、多维。一轮轮搞下来,都会晕。没有计算机基础的同学,对存储、地址这样的概念比较难理解。因为没有直观的东西给你们看。有个好办法帮助理解:把存储介质想象成围棋盘。每一个格子代表一个字节存储空间,有独立的地址编号。一行代表一维,一个面(整个棋盘)代表二维,如果三维就是只有一行的棋盘和另外一个完整棋盘叠加,四维就是两个完整期盼叠加,依次类推。用一根万能笔代表指针,这根笔有读的功能、写的功能、擦除的功能等(给指针一个地址和一个命令,就可以干相应的事)。然后结合实际例子,根据上面理解方法在脑子中算出程序结果,最后运行程序验证理解的正确性。
有什么问题,欢迎大家留言,一起交流学习。
玩编程
最困难的地方是学了半天都还没法看到实际应用的效果,不像学HTML,两天就能看到一个网页…学Python,两天就能抓个文件,学才C#,两天就可会做个窗体。
学C,如果你不是能够享受算法乐趣学霸,想看个网页少说需要一两个月吧…
成都茂大叔
学c最大的难题是语言之外的东西,c要写得好,你必须得懂计算机,懂CPU,懂内存,懂cache,懂指令集,不一定能熟练写汇编,但至少得知道汇编是什么,得懂堆栈,得了解编译器。如果这些你都懂得差不多了,那指针之类的简直就是小儿科,水到渠成自然就懂了。
泾渭漳淮
自学C语言的最大难题是什么?大家都回答说是指针,我有不同的观点。
C语言是紧紧贴合硬件的高级语言,因此要精通C语言,从根本上说,是熟悉硬件。指针本质上就是内存地址的索引嘛,然而内存是怎么回事,它是怎么排列的,字节对齐是怎么工作的,这些都是计算机硬件层面的事情。学好C语言,不懂硬件是不可能的。因此,除了计算机和电子/通信专业以外的人,很少有人真正精通C语言的。
我也不建议科班以外的人来学习,学习其他高级语言就行了,比如Python和Java。
聊科技爱生活
其实C语言最难点在指针部分,指针的操作有跟数据结构有内在关联,更深的涉及算法。
塞纳河水10000
我觉的最大的难点是与实际向联系,光学语法,算法都没大用,一遇到实际问题,不懂的,有什么用,要理论与与实践向结合,才学的快,学出来才有用
月饮沙丘
掌握基础知识并不难,写程序难在解决问题的思路和方法。请参看我的一系列C语言讲解视频
嵌入式经验分享
看你懒不懒,没啥难的,学一门计算机语言简单,写好程序难。你会说话,但你不是作家,写不出优美的词句。