自学C语言的最大难题是什么?

数学问题


万事开头难,自学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语言讲解视频


嵌入式经验分享


看你懒不懒,没啥难的,学一门计算机语言简单,写好程序难。你会说话,但你不是作家,写不出优美的词句。