您好,登錄后才能下訂單哦!
前邊我們提到了,指針的意義常常在小程序里是表現不出來的,關于復雜程序來說,有時分用了指針,反而能夠比沒用指針還費事,然則為了讓人人穩固一下指針的用法,我照樣寫了個運用指針的流水燈程序,目標是讓人人從復雜程序開端理解指針,當程序復雜的時分不至于不知所措。
#include <reg52.h> sbit 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 指向的字節左移一位 */ void ShiftLeft(unsigned char *p){ *p = *p << 1; //應用指針變量可以向函數外輸入運算后果 }
這是一個運用指針完成流水燈的例子,地道是為了講指針而寫如許一段程序,程序中傳遞的是 buf 的地址,把這個地址直接傳遞給函數 ShiftLeft 的形參指針變量 p,也就是 p 指向了 buf。比照之前的函數挪用,人人能否看明確,假如是通俗變量傳遞,只能單向的,也就是說,主函數傳遞給子函數的值,子函數只能運用卻不克不及改動。而如今我們傳遞的是指針,不只僅子函數可以運用 buf 里邊的值,并且還可以對 buf 里邊的值停止修正。
此外再強調一句,只需是*p 前邊帶了變量類型如 unsigned char,就是表現界說了一個指針變量 p,而履行代碼中的*p,是指 p 所指向的內容。
經過實際的進修和如許一個例程,我想人人對指針應當有概念了,至于它的靈敏使用,需求我們在后邊的程序中漸漸去領會,實際上就不再過多贅述了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。