c语言结构内部定义指针,C语言知识补漏(一)结构体指针以及位域定义
一、結構體指針
typedef struct
{
unsigned
long int DATA;
unsigned
long int DIRECTION;
unsigned
long int INTERRUPT_MASK;
unsigned
long int EDGE_CAPTURE;
}PIO_STR;
//define LED Register
#ifdef _LED
#define LED ((PIO_STR *)LED_BASE)?//
表示定義了一個PIO_STR的指針,并強制這個指針的值
//為LED_PIO_BASE,意思是定義了一個常量指針,指針類型為PIO_STR
分析:
1. PIO_STR是一個結構體,它是:
typedef struct
{
unsigned long int DATA;
unsigned long int DIRECTION;
unsigned long int INTERRUPT_MASK;
unsigned long int EDGE_CAPTURE;
}
2. PIO_STR *是表示指向這樣一個結構體的指針
3. LED_BASE是一個數值:0x00001800,這里代表地址
4. (PIO_STR *) LED_BASE 表示對這樣一個地址進行強制轉換,使得它變成指向結構體的指針
5. #define LED ((PIO_STR *) LED_BASE)
所以LED是一個值為0x00001800(表示指向地址0x00001800)的,指向一個PIO_STR結構體的指針。地址已經確定,下一步就該在0x00001800這個地址上分配一個具體的PIO_STR結構體了。
注意:LED這個指針永遠指向一個地址在0x00001800的結構體。它不能指向其他地方,因而是一個常量指針。但是它可以對指向的結構體進行修改。
二、位域定義
一般在結構體的定義中,我們會見到如下代碼:
struct
{
unsigned char
P8OUT0?: 1;
unsigned char
P8OUT1?: 1;
unsigned char
P8OUT2?: 1;
unsigned char
P8OUT3?: 1;
unsigned char
P8OUT4?: 1;
unsigned char
P8OUT5?: 1;
unsigned char
P8OUT6?: 1;
unsigned char
P8OUT7?: 1;
}
P8OUT_bit;
結構體內部的語句
unsigned char?P8OUT0?: 1;
表示定義了一個位域,P8OUT0是該位域的域名,而且P8OUT0只占用一個位。
所謂C中的位域,是指信息在存儲時,并不需要占用一個完整的字節,而只需占幾個或一個二進制位。為了節省存儲空間,并使處理簡便,C語言提供了一種數據結構,稱為“位域”或“位段”。所謂“位域”是把一個字節中的二進位劃分為幾個不同的區域,并說明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。這樣就可以把幾個不同的對象用一個字節的二進制位域來表示。
具體見轉載博文:C語言位域精解
總結
以上是生活随笔為你收集整理的c语言结构内部定义指针,C语言知识补漏(一)结构体指针以及位域定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Stage划分和Task最佳位置
- 下一篇: python自动化入门_python自动