一、單片機指針是什么?
單片機指針是指某個變量或數據所在存儲區的內存地址
二、單片機指針有什么作用?
能夠有效地表示數據結構,能動態分配內存,能較方便地使用字符串,有效地使用數組。
三、單片機指針咋么表示?
數據類型 [存儲器類型] * 變量名,例如:int xdata * pi,其中*是指針運算符,pi是指針變量,*pi表示某變量或數據所在存儲區地址所對應的數值。
四、單片機指針賦值方式
(1)、不用聲明單片機指針變量的情況下賦值
int a=5;//定義變量a
int *p=&a;//表示把變量a所在內存地址(由內存器分配)存放的數據5賦給指針變量p
(2)、聲明單片機指針變量的情況下賦值
int a=5;//定義變量a
int *p;//聲明指針變量p
p=&a;//表示把變量a所在內存地址(由內存器分配)賦給指針變量p,作為指針變量p所在內存地址(由內存器分配)存放的數據。
value=*p;//表示把指針變量p對應變量a所在內存地址(由內存器分配)存放的數據5賦給變量value
五、單片機指針通俗理解
由上圖可知:變量STR內存地址51H存放數據40H,要通過變量STRIP獲取變量STR內存地址51H存放的數據40H,可使用單片機指針(某個變量或數據所在存儲區的內存地址)來完成。首先讓變量STRIP獲取變量STR內存地址51H,表達方式為STRIP=&STR,由此可見指針(即變量STRIP)存儲的數據是另一個變量(即變量STR)的內存地址),再獲取變量STR內存地址51H存放的數據40H賦給某一個變量即可,表達方式為VALUE=*STRIP,也可表示為int *STRIP=&STR。
六、單片機指針咋么用?
(1)、用單片機指針編程點亮LED燈的單片機C語言程序
#include<reg51.h> #define uchar unsigned char sbit LED = P1^0; uchar table[] = {0,1};//定義數組 uchar *pi;//聲明指針變量 void main() { while(1) { pi = table;//把數組變量table里的第一個元素0所在內存地址(由內存器分配)賦給指針變量pi,也可這樣表示:pi = &table[0],其表達意義一樣。 LED = *pi;//*pi表示取指針變量pi所指內存地址(由內存器分配)對應的值(即數組table[]中的第一個元素0)賦給led,如果是要數組里面第二個元素1這一步就該寫成*(pi+1)。 } }
(2)、用單片機指針編程循環點亮8 位LED流水燈的單片機C語言程序
#include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar *pi;//聲明指針變量 uchar code table[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//定義數組 void delay(uint t) { uchar m,n; for(m=0;m<t;m++) for(n=0;n<110;n++); } void main() { uchar i; while(1) { for(i=0;i<8;i++) { pi = table;//把數組變量table里的第一個元素所在內存地址(由內存器分配)賦給指針變量pi,也可這樣表示:pi = &table[0],其表達意義一樣。 P1 = *(pi+i);//*(p+i)表示取指針變量pi所指向數組變量table內元素所在內存地址對應的值賦給P1端口,比如:把數組變量table內的第一個元素(即0xFE)所在內存地址(由內存器分配)對應的值(即table內的第一個元素0xFE)賦給P1端口。 delay(220); } } }