当然是指针更难,只是单单说指针更难,略显空洞。应该结合C语言的应用场景,C语言基本都是在嵌入式之内用到,(这里把单片机也划归到嵌入式的领域),嵌入式的一个特点就是资源有限,没有那么大的内存以及存储空间给你用,单片机则更加拮据,在RAM只有几k,flash也就几十k的情况下,我甚至都想越过寄存器来直接操作地址,因为资源实在是太少了,除此之外,在一些工控领域或其他领域,实时性也是一个很需要考虑的因素,在一个强实时性系统中,我需要在几十us的时间内计算大量的算法,这时候怎么办,math库想都不要想,一个float都不能用,这时候除了计算方式的优化(一般使用定点运算Q格式),另一方面就可以用指针操作来加快程序运行速度,实践证明,运用指针是可以加快运行速度的。当然C语言也没有那么多保护机制,也正是因为如此,指针运用在千变万化的同时又很考验编程者对于指针是否熟悉,稍有不慎便会出现意想不到的问题。
除此之外,结构体也是常用的,因为在C语言中,只有结构体是跟面向对象有点关系的东西,程序中用结构体,说明编程者就已经有了初步的对象的思维来管理程序,如果有兴趣看看别人写的库,包括ST写的STM32的库,以及一些开源的RTOS系统源码,都是非常好的,结构体与指针运用的模范程序,看这些C语言大佬是如何编写大型的C语言库的。结构体,指针,结构体指针,函数指针,指针函数,这些在库中是非常常见的,学习编写大型程序,会让C水平上升一个档次。
其实关键就是 结构体 和 指针,
这些在具体的应用中广泛应用。
特别是指针的概念,这个是难点,也是C提供巨大灵活性的关键,当然,指针也是很多bug的原因,指针太灵活了,稍有不慎,管理上就可能造成bug,有些危害还很大。
指针和结构体结合的那种会比较难,而且有些指针,指向的是一个函数,这种会更复杂
指针操作需要对指针的合法性进行判断,否则容易越界