單片機(jī)c語(yǔ)言教程:C51運(yùn)算符和表達(dá)式(指針和地址運(yùn)算符)
我們學(xué)習(xí)數(shù)據(jù)類型時(shí),學(xué)習(xí)過指針類型,知道它是一種存放指向另一個(gè)數(shù)據(jù)的地址的變量類型。指針是單片機(jī)C語(yǔ)言中一個(gè)十分重要的概念,也是學(xué)習(xí)單片機(jī)C語(yǔ)言中的一個(gè)難點(diǎn)。對(duì)于指針將會(huì)在第九課中做詳細(xì)的講解。在這里我們先來(lái)了解一下單片機(jī)C語(yǔ)言中供給的兩個(gè)專門用于指針和地址的運(yùn)算符:
本文引用地址:http://www.ex-cimer.com/article/170885.htm* 取內(nèi)容
取地址取內(nèi)容和地址的一般形式分別為:
變量 = * 指針變量 指針變量 = 目標(biāo)變量
取內(nèi)容運(yùn)算是將指針變量所指向的目標(biāo)變量的值賦給左邊的變量;取地址運(yùn)算是將目標(biāo)變量的地址賦給左邊的變量。要注意的是:指針變量中只能存放地址(也就是指針型數(shù)據(jù)), 一般情況下不要將非指針類型的數(shù)據(jù)賦值給一個(gè)指針變量。
下面來(lái)看一個(gè)例子,并用一個(gè)圖表和實(shí)例去簡(jiǎn)單理解指針的使用方法和含義。
設(shè)有兩個(gè) unsigned int 變量 ABC 處 CBA 存放在 0x0028,0x002A 中 另有一個(gè)指針變量 portA 存放在 0x002C 中 那么我們寫這樣一段程序去看看*,的運(yùn)算結(jié)果
unsigned int data ABC _at_ 0x0028; unsigned int data CBA _at_ 0x002A; unsigned int data *Port _at_ 0x002C;
#include at89x51.h>
#include stdio.h>
void main(void)
{
SCON = 0x50; //串行口方式 1,允許接收 TMOD = 0x20; //定時(shí)器 1 定時(shí)方式 2
TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8;
TI = 1;
TR1 = 1; //啟動(dòng)定時(shí)器
ABC = 10; //設(shè)初值 CBA = 20;
Port = CBA; //取 CBA 的地址放到指針變量 Port
*Port = 100; //更改指針變量 Port 所指向的地址的內(nèi)容
printf(1: CBA=%dn,CBA); //顯示此時(shí) CBA 的值
Port = ABC; //取 ABC 的地址放到指針變量 Port
CBA = *Port; //把當(dāng)前 Port 所指的地址的內(nèi)容賦給變量 CBA
printf(2: CBA=%dn,CBA); //顯示此時(shí) CBA 的值
printf( ABC=%dn,ABC); //顯示 ABC 的值
}
程序初始時(shí)
值 | 地址 | 說明 |
0x00 | 0x002DH | |
0x00 | 0x002CH | |
0x00 | 0x002BH | |
0x00 | 0x002AH | |
0x0A | 0x0029H | |
0x00 | 0x0028H |
執(zhí)行 ABC = 10;向 ABC 所指的地址 0x28H 寫入 10(0xA),因 ABC 是 int 類型要占用 0x28H 和
0x29H 兩個(gè)字節(jié)的內(nèi)存空間,低位字節(jié)會(huì)放入高地址中,所以 0x28H 中放入 0x00,0x29H 中 放入 0x0A
值 | 地址 | 說明 |
0x00 | 0x002DH | |
0x00 | 0x002CH | |
0x00 | 0x002BH | |
0x00 | 0x002AH | |
0x0A | 0x0029H | ABC 為 int 類型占用兩字節(jié) |
0x00 | 0x0028H |
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論