提到C语言很多初学者都觉得,学到中间就进行不下去了,因为碰到了几个硬骨头死活翻不过去,于是很多人给C语言下结论太难了,太靠近底层了,特别是那几块难啃的骨头,直接理解不了,进行不下去。

今天就来说下,最难啃的三块骨头,看到底是谁?

指针公认最难理解的概念,也是让很多初学者选择放弃的直接原因

指针之所以难理解,因为指针本身就是一个变量,是一个非常特殊的变量,专门存放地址的变量,这个地址需要给申请空间才能装东西,而且因为是个变量可以中间赋值,这么一倒腾很多人就开始犯晕了,绕不开弯了。C语言之所以被很多高手所喜欢,就是指针的魅力,中间可以灵活的切换,执行效率超高,这点也是让小白晕菜的地方。

指针是学习绕不过去的知识点,而且学完C语言,下一步紧接着切换到数据结构和算法,指针是切换的重点,指针搞不定下一步进行起来就很难,会让很多人放弃继续学习的勇气。

指针直接对接内存结构,常见的C语言里面的指针乱指,数组越界根本原因就是内存问题。在指针这个点有无穷无尽的发挥空间。很多编程的技巧都在此集结。

指针还涉及如何申请释放内存,如果释放不及时就会出现内存泄露的情况,指针是高效好用,但不彻底搞明白对于有些人来说简直就是噩梦。

函数概念,面向过程对象模块的基本单位,以及对应各种组合,函数指针,指针函数

一个函数就是一个业务逻辑块,是面向过程,单元模块的最小单元,而且在函数的执行过程中,形参,实参如何交换数据,如何将数据传递出去,如何设计一个合理的函数,不单单是解决一个功能,还要看是不是能够复用,避免重复造轮子。

函数指针和指针函数,表面是两个字面意思的互换实际上含义截然不同,指针函数比较好理解,就是返回指针的一个函数,函数指针这个主要用在回调函数,很多人觉得函数都没还搞明白,回调函数更晕菜了。其实可以通俗的理解指向函数的指针,本身是一个指针变量,只不过在初始化的时候指向了函数,这又回到了指针层面。没搞明白指针再次深入的向前走特别难。

结构体,递归

很多在大学学习C语言的,很多课程都没学完,结构体都没学到,因为从章节的安排来看好像,结构体学习放在教材的后半部分了,弄得很多学生觉得结构体不重要,如果只是应付学校的考试,或者就是为了混个毕业证,的确学的意义不大。

如果想从事编程这个行业,对这个概念还不了解,基本上无法构造数据模型,没有一个业务体是完全使用原生数据类型来完成的,很多高手在设计数据模型的时候,一般先把头文件中的结构体数据整理出来。然后设计好功能函数的参数,以及名字,然后才真正开始写c源码。

如果从节省空间考虑结构体里面的数据放的顺序不一样在内存中占用的空间也不一样,结构体与结构体之间赋值,结构体存在指针那么赋值要特别注意,需要进行深度的赋值。

递归一般用于从头到位统计或者罗列一些数据,在使用的时候很多初学者都觉得别扭,怎么还能自己调用自己?而且在使用的时候,一定设置好跳出的条件,不然无休止的进行下去,真就成无线死循环了。

这三大块硬骨头是学习C语言的绊脚石,下功夫拿掉基本上C语言的大动脉就打通了,那么再去学习别的内容就相对比较简单了。编程学习过程中越是痛苦的时候,学到的东西就会越多,克服过去就会自己的技能,放弃了前面的付出的时间都将清零。越是难学的语言在入门之后,在入门之后越觉得过瘾,而且还容易上瘾。你上瘾了没?还是放弃了?

C++两个函数可以相互递归吗_C语言“最难啃”的三块硬骨头!你知道吗?相关推荐

  1. C++两个函数可以相互递归吗_C语言(7)- 递归

    (本文为原创,版权归作者所有) 递归(Recursion) 递归是一种计算方法,它的每一步计算都可以被分解为更小规模的相同的计算,因此一个问题可以通过不断重复的分解来解决.一个典型的例子是计算阶乘N! ...

  2. C++两个函数可以相互递归吗_通俗讲:数据结构递归思想

    通俗讲:数据结构递归思想 脑容量有限,拒绝花里胡哨 一个递归求阶乘的例子 #如5的阶乘 f(6)=6*5*4*3*2*1 def f(int n) {if n <= 0 : return 1re ...

  3. C++两个函数可以相互递归吗_[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进

    [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...

  4. java递归排雷_C语言实现扫雷小游戏

    源代码链接:https://github.com/Sasura321/Minesweeper 扫雷游戏也算是一个简单的小项目,这儿是之前写的代码,来写成博文回顾一下.首先,代码要实现几个功能: 第一下 ...

  5. c语言递归法1 2 n,递归法_C语言递归法_递归算法经典实例(2)

    在网上搜索梵塔游戏fanta.exe,自己动手,体会梵塔问题,尝试解决问题. 3 问题分析 教师提出问题: 1. 盘子移动过程中的两个要求? 2. 寻找规律:(教师引导,学生描述移动过程) (1)两个 ...

  6. c#语言怎么定义函数,C#方法方法用法 _C#语言-w3school教程

    C#语言 的 C#方法 C#中的方法是一组执行任务的语句. 每个 C# 程序至少有一个类包含一个名称为Main()的方法. 要使用方法,需要: 定义方法 调用方法 C# 中定义方法 当要定义一个方法时 ...

  7. c语言函数输出输出型参数_c语言技巧多个输出参数

    c语言函数输出输出型参数 Over the past few years under the "new Microsoft", there have been many effor ...

  8. c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理

    在本人的<C语言可变参数函数的实现方法>一文中,介绍了如何建立自己的可变参数函数. 下面继续介绍可变参数函数的实现原理. 在汇编语言程序设计中,详细介绍了子程序的实现思想: (1)子程序只 ...

  9. linux c语言内核函数,2014-1-5_linux内核学习(1)_C语言基础

    1.结构体的初始化 static struct file_operations fops = { .read = device_read, .write = device_write, .open = ...

最新文章

  1. docker搭建gitlab
  2. 解决vnc灰屏,黑屏,鼠标大黑叉情况
  3. Python学习笔记__1.5章 循环
  4. 【测试点分析】1088 三人行 (20分)_29行代码AC
  5. 乒乓球单循环赛_重庆市首届乒乓球业余锦标赛开拍 冠军奖3万 总奖金近10万
  6. 【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA
  7. 嘉年华回顾丨PingCAP CEO 刘奇,带你探寻TiDB...
  8. Go:创建新进程(os.StartProcess源码解读)
  9. 禁用win10 1903 wifi诊断
  10. MBP清除NVRAM和PRAM
  11. 哲理小故事--跳蚤人生
  12. 小米路由器安装花生壳实现外网映射
  13. RStudio启动报错(fatal error)
  14. EasyUI学习笔记6:MIS开发利器_ datagrid插件(上)
  15. kaggle——信用卡欺诈检测项目实战
  16. [渗透教程]-001-信息收集-第三方软件
  17. 神经网络论文研究-图像处理方向4-geoglenet
  18. 什么浏览器好用稳定速度快?
  19. go ip过滤_智慧识别“GOIP”呼转 罪犯无所遁形
  20. 20行代码做一个简易微信群发工具需要哪些单词

热门文章

  1. 基于html5的学生管理系统,基于HTML5的学生信息管理系统的设计与实现
  2. 在controller类的每个方法执行前调用某个方法_springboot:异步调用@Async
  3. DotNetNuke 5 User's Guide: Get Your Website Up and Running
  4. 软件工程第一次作业-谢旭军
  5. watch 与 computed
  6. asp.net获取ip地址的方法
  7. Poj 1324 Holedox Moving 状压判重+BFS
  8. 推荐一款好用的jquery弹出层插件——wbox
  9. Libhybris之Glibc和Bionic共存时的TLS问题(四)
  10. Android4.2之Camera系统HAL调用流程