前邊我們提到了,指針的意義常常在小程序里是表現(xiàn)不出來的,關(guān)于復(fù)雜程序來說,有時分用了指針,反而能夠比沒用指針還費事,然則為了讓人人穩(wěn)固一下指針的用法,我照樣寫了個運用指針的流水燈程序,目標是讓人人從復(fù)雜程序開端理解指針,當(dāng)程序復(fù)雜的時分不至于不知所措。
呼倫貝爾網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)從2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
#includesbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; void ShiftLeft(unsigned char *p); void main(){ unsigned int i; unsigned char buf = 0x01; ENLED = 0; //使能選擇自力 LED ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; while (1){ P0 = ~buf; //緩沖值取反送到 P0 口 for (i=0; i<20000; i++); //延時 ShiftLeft(&buf); //緩沖值左移一位 if (buf == 0){ //如移位后為 0 則重賦初值 buf = 0x01; } } } /* 將指針變量 p 指向的字節(jié)左移一位 */ void ShiftLeft(unsigned char *p){ *p = *p << 1; //應(yīng)用指針變量可以向函數(shù)外輸入運算后果 }
這是一個運用指針完成流水燈的例子,地道是為了講指針而寫如許一段程序,程序中傳遞的是 buf 的地址,把這個地址直接傳遞給函數(shù) ShiftLeft 的形參指針變量 p,也就是 p 指向了 buf。比照之前的函數(shù)挪用,人人能否看明確,假如是通俗變量傳遞,只能單向的,也就是說,主函數(shù)傳遞給子函數(shù)的值,子函數(shù)只能運用卻不克不及改動。而如今我們傳遞的是指針,不只僅子函數(shù)可以運用 buf 里邊的值,并且還可以對 buf 里邊的值停止修正。
此外再強調(diào)一句,只需是*p 前邊帶了變量類型如 unsigned char,就是表現(xiàn)界說了一個指針變量 p,而履行代碼中的*p,是指 p 所指向的內(nèi)容。
經(jīng)過實際的進修和如許一個例程,我想人人對指針應(yīng)當(dāng)有概念了,至于它的靈敏使用,需求我們在后邊的程序中漸漸去領(lǐng)會,實際上就不再過多贅述了。