4.4.4  指针

4.4.4 指针

可以用指针(Pointer)的方法访问变量,用指针访问数组、结构、联合变量非常方便。例如,指向结构类型的指针变量p,

struct GPDMUX_BITS ∗p; //声明一个指向结构GPDMUX_BITS的指针p

struct GPDMUX_BITS bit; //声明一个结构GPDMUX_BITS类型的变量bit

p=&bit; //结构指针p指向变量bit

结构变量bit的成员T1CTRIP_PDPA_GPIOD0可用下述3种形式之一访问:

bit.T1CTRIP_PDPA_GPIOD0 //用结构变量点运算符的方法访问

(∗p).T1CTRIP_PDPA_GPIOD0//用间接访问运算符指针和点运算符访问

p->T1CTRIP_PDPA_GPIOD0//用指针指向(箭头运算符)成员变量

ANSI C新标准增加了一种void∗指针类型,即可以定义一个指针变量,但不指定它是指向哪一种数据类型,例如

unsigned long∗Source=(void∗)&PieVectTableInit;

其中PieVectTableInit是结构PIE_VECT_TABLE(中断向量)的一个变量。地址&PieVectTableInit被(void∗)强制转换为void∗类型。指针Source指向unsigned long类型。

例如,描述中断向量表的指针PINT

978-7-111-57271-8-Chapter04-20.jpg

结构PIE_VECT_TABLE的所有成员均为中断函数的首地址(中断向量),即指向中断函数的指针。因此,在定义其成员如PIE1_RESERVED的时候,要在其前面加PINT,表示PIE1_RESERVED是PINT类型的变量,即指向中断函数的指针,这样程序显得简洁。

C语言中访问片内外数据存储器(或外设寄存器),可以用指针的方法实现。下面举例说明。

例4-3 将DSP的数据存储器400H开始的16个单元复制到500H开始的单元。

978-7-111-57271-8-Chapter04-21.jpg

978-7-111-57271-8-Chapter04-22.jpg