|
編程中,對(duì)于有些變量,可以不賦初值,但有些變量,一定要賦初值,如果沒有賦初值,就會(huì)出現(xiàn)錯(cuò)誤,如果事先有所了解還好,知道查變量初值是不是沒有賦值,如果沒有這方面的經(jīng)驗(yàn),可能要排查好久才能查出故障,有時(shí)甚至查不出故障。如下面這段單片機(jī)程序:
#include <reg52.h> #define uchar unsigned char sbit rs=P3^5; sbit rw=P3^6; sbit E=P3^7; //================================ void delay(int ii){int i;for(i=0;i<ii;i++);} //------------------------------- void LM1602_write(uchar dat,char cd) {E=0;rw=0;rs=cd; P0=dat; E=1;delay(5);E=0; } //-------------------------------- void Putstr(char *str) {int i; while(str[ i]!=0){LM1602_write(str[ i],1);i++;delay(50);}
} //=============================== main() {
LM1602_write(0x38,0);
LM1602_write(0x0f,0);
delay(50); Putstr("Hello MCU!");Putstr("12345");
while(1); }
程序原意要在液晶顯示器上顯示出兩個(gè)字符,但運(yùn)行結(jié)果如下。
P8a.jpg (66.01 KB, 下載次數(shù): 56)
下載附件
2019-4-2 19:13 上傳
可以看出不如預(yù)期,這是因?yàn)樽兞?/font>Putstr(char *str)的變量i沒有賦初值,如果改成這樣就不會(huì)出現(xiàn)以上情況。 void Putstr(char *str) {int i=0; while(str[ i]!=0){LM1602_write(str[ i],1);i++;delay(50);}
} 此時(shí)運(yùn)行情況如下:
P8b.jpg (68.12 KB, 下載次數(shù): 43)
下載附件
2019-4-2 19:14 上傳
程序運(yùn)行達(dá)到預(yù)期。所以象這種變量大家要記得賦初值。 |