昨天,刚刚请教了刘老师,对C语言指针的不安全操作有了一个更深刻的认识。
初学指针的人,往往对char *p="Hello World"式的赋值认为理所当然,最造成的“该内存不能written”式的错误不知所措。
首先,我们要知道,char *p是声明了一个指针,但我们并没有要求它指向哪片内存区域,因此它是随机指向了某个地方。至于这个地方,既可能是空白内存区域,也可能是我们已经存放了数据的区域。若是前者,则无关紧要。若是后者,则会造成数据的覆盖,使得程序受损,从而崩溃。这就是所谓的不安全指针运用。
那么,如何做到安全的使用指针呢?
其实很简单,牢记“永远让指针指向你所要的地方”,而不要让它随机指向某个地方。这样,就防止了对有用数据的破坏,消除了不安全因素。例如:
char string[]="Hello World";
char *p;
p=string;
好了,这就使得*p指向了我们开辟的字符串string[]的头部,一切都是安全的(除非你让指针地址增加时的增量增加到了字符串所占内存区域结束之后的地方,或减少到了这片内存的前方)。
不学好指针,就不算学好了C语言。因为高级语言里只有C语言能如此灵活强大的直接控制硬件,是对MCU控制的首先语言。这就是我们学C的前途所在。
好好学C,做驱动,做OS