C言語指針的複雜示例

前邊我們提到了,指針的意義常常在小程序裏是表現不出來的,關於複雜程序來說,有時分用了指針,反而能夠比沒用指針還費事,然則爲了讓人人穩固一下指針的用法,我照樣寫了個運用指針的流水燈程序,目標是讓人人從複雜程序開端理解指針,當程序複雜的時分不至於不知所措。

			#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 所指向的內容。
經過實際的進修和如許一個例程,我想人人對指針應當有概念了,至於它的靈敏使用,需求我們在後邊的程序中漸漸去領會,實際上就不再過多贅述了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章