鍍金池/ 教程/ 數(shù)據(jù)庫/ 12.3 C 語言指針的簡單示例
8.3 C 語言函數(shù)的形參和實(shí)參
12.2 C 語言指針變量的聲明
12.5 ?C 語言字符數(shù)組和字符指針
7.3 單片機(jī) LED 點(diǎn)陣的介紹
11.5 UART 串口通信的基本應(yīng)用
9.9 單片機(jī)蜂鳴器控制程序和驅(qū)動電路
10. 單片機(jī)實(shí)例練習(xí)與經(jīng)驗(yàn)積累
10.3 單片機(jī)交通燈控制程序和設(shè)計(jì)原理
9.8 實(shí)用的 28BYJ-48 步進(jìn)電機(jī)控制程序
8.2 C 語言函數(shù)的調(diào)用
12.4 C 語言指向數(shù)組元素的指針
7.1 C 語言變量的作用域
11.2 RS232 通信接口
12.7 1602 液晶的讀寫時(shí)序介紹
7.2 C 語言變量的存儲類別
8. C 語言函數(shù)進(jìn)階與單片機(jī)按鍵
10.4 51單片機(jī) RAM 區(qū)域的劃分
12.1 C 語言變量的地址
11. UART 串口通信
7. 變量進(jìn)階與點(diǎn)陣 LED
8.4 單片機(jī)按鍵介紹
9.3 電機(jī)的分類
9.1 單片機(jī) IO 口的結(jié)構(gòu)
單片機(jī)通信實(shí)例與 ASCII 碼
8.1 單片機(jī)最小系統(tǒng)解析(電源、晶振和復(fù)位電路)
9.2 單片機(jī)上下拉電阻
11.4 單片機(jī) IO 口模擬 UART 串口通信
9.5 讓 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)起來
9.7 28BYJ-48 步進(jìn)電機(jī)控制程序基礎(chǔ)
12.8 1602 液晶指令介紹
12.3 C 語言指針的簡單示例
8.7 單片機(jī)矩陣按鍵的掃描
7.4 單片機(jī) LED 點(diǎn)陣的圖形顯示
8.6 單片機(jī)按鍵消抖程序
10.2 單片機(jī)中 PWM 的原理與控制程序
7.6 單片機(jī) LED 點(diǎn)陣的橫向移動(動態(tài)顯示)
11.3 USB 轉(zhuǎn)串口通信
12.9 1602 液晶簡單顯示程序
9.4 28BYJ-48 步進(jìn)電機(jī)原理
8.5 ?單片機(jī)獨(dú)立按鍵掃描程序
12. C 語言指針基礎(chǔ)與1602液晶的初步認(rèn)識
9. 單片機(jī)中的步進(jìn)電機(jī)與蜂鳴器
10.1 單片機(jī)數(shù)字秒表程序
7.5 單片機(jī) LED 點(diǎn)陣的縱向移動(動態(tài)顯示)
8.8 單片機(jī)簡易加法計(jì)算器程序
11.1 單片機(jī)串行通信介紹
10.5 單片機(jī)長短按鍵的應(yīng)用
12.6 1602 液晶介紹(電路和引腳圖)
9.6 28BYJ-48 步進(jìn)電機(jī)轉(zhuǎn)動精度與深入分析

12.3 C 語言指針的簡單示例

前邊我們提到了,指針的意義往往在小程序里是體現(xiàn)不出來的,對于簡單程序來說,有時(shí)候用了指針,反而可能比沒用指針還麻煩,但是為了讓大家鞏固一下指針的用法,我還是寫了個(gè)使用指針的流水燈程序,目的是讓大家從簡單程序開始了解指針,當(dāng)程序復(fù)雜的時(shí)候不至于手足無措。

#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; //使能選擇獨(dú)立 LED
    ADDR3 = 1;
    ADDR2 = 1;
    ADDR1 = 1;
    ADDR0 = 0;

    while (1){
        P0 = ~buf; //緩沖值取反送到 P0 口
        for (i=0; i<20000; i++); //延時(shí)
        ShiftLeft(&buf); //緩沖值左移一位
        if (buf == 0){ //如移位后為0則重賦初值
            buf = 0x01;
        }
    }
}
/* 將指針變量 p 指向的字節(jié)左移一位 */
void ShiftLeft(unsigned char *p){
    *p = *p << 1; //利用指針變量可以向函數(shù)外輸出運(yùn)算結(jié)果
}

這是一個(gè)使用指針實(shí)現(xiàn)流水燈的例子,純粹是為了講指針而寫這樣一段程序,程序中傳遞的是 buf 的地址,把這個(gè)地址直接傳遞給函數(shù) ShiftLeft 的形參指針變量 p,也就是 p 指向了 buf。對比之前的函數(shù)調(diào)用,大家是否看明白,如果是普通變量傳遞,只能單向的,也就是說,主函數(shù)傳遞給子函數(shù)的值,子函數(shù)只能使用卻不能改變。而現(xiàn)在我們傳遞的是指針,不僅僅子函數(shù)可以使用 buf 里邊的值,而且還可以對 buf 里邊的值進(jìn)行修改。

此外再強(qiáng)調(diào)一句,只要是 p 前邊帶了變量類型如 unsigned char,就是表示定義了一個(gè)指針變量 p,而執(zhí)行代碼中的 p,是指 p 所指向的內(nèi)容。

通過理論的學(xué)習(xí)和這樣一個(gè)例程,我想大家對指針應(yīng)該有概念了,至于它的靈活應(yīng)用,需要我們在后邊的程序中慢慢去體會,理論上就不再過多贅述了。