昨天,剛剛請教了劉老師,對C語言指針的不安全操作有了一個更深刻的認識。
初學指針的人,往往對char *p="Hello World"式的賦值認為理所當然,最造成的“該內存不能written”式的錯誤不知所措。
首先,我們要知道,char *p是聲明了一個指針,但我們并沒有要求它指向哪片內存區(qū)域,因此它是隨機指向了某個地方。至于這個地方,既可能是空白內存區(qū)域,也可能是我們已經(jīng)存放了數(shù)據(jù)的區(qū)域。若是前者,則無關緊要。若是后者,則會造成數(shù)據(jù)的覆蓋,使得程序受損,從而崩潰。這就是所謂的不安全指針運用。
那么,如何做到安全的使用指針呢?
其實很簡單,牢記“永遠讓指針指向你所要的地方”,而不要讓它隨機指向某個地方。這樣,就防止了對有用數(shù)據(jù)的破壞,消除了不安全因素。例如:
char string[]="Hello World";
char *p;
p=string;
好了,這就使得*p指向了我們開辟的字符串string[]的頭部,一切都是安全的(除非你讓指針地址增加時的增量增加到了字符串所占內存區(qū)域結束之后的地方,或減少到了這片內存的前方)。
不學好指針,就不算學好了C語言。因為高級語言里只有C語言能如此靈活強大的直接控制硬件,是對MCU控制的首先語言。這就是我們學C的前途所在。
好好學C,做驅動,做OS