前边我们提到了,指针的意义常常在小程序里是表现不出来的,关于复杂程序来说,有时分用了指针,反而能够比没用指针还费事,然则为了让人人稳固一下指针的用法,我照样写了个运用指针的流水灯程序,目标是让人人从复杂程序开端理解指针,当程序复杂的时分不至于不知所措。
#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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。