用法一:绝对地址访问:
1.1:
#define XBYTE ((unsigned char volatile xdata *) 0)
#define MDrv_WriteByte( u16Reg, u8Value ) (XBYTE[u16Reg] = u8Value)
1.2;
#define FVAR(object, addr) (*((object volatile xdata *) (addr)))
相当于定义了一个指针变量: object volatile xdata *pPtr=&(addr),故可以直接再使用该指针了。可以FVAR(unsigned char , 0x8000)=10;unsigned char a=FVAR(unsigned char , 0x8000);
总结一句话,其实以上两个用法都来自于keil 的absacc.h 的原型。
1.3:
void funName( dataType a ,unsigned char * pPtr)
{
for(i=0;i<sizeof(a);i++)
{
pPtr[i]=i; // 在这里只是表示了要对 *pPtr来进行处理。
}
}
void main(void)
{
unsigned long a;
funName(a,(unsigned char *)&a);
//todo
// 在此时你已经a按unsigned char 的字节数进行了处理。
}
当然了,以前说的几个都是很简单的、老生常谈的东西,再举一个我一次面试的关于指针的试题,很简单。
1.4
说出下列变量在c51占几个字节;
unsigned char *ptr; // 2 Bytes 按8bit c51
unsigned long *ptr // 2 Bytes 按8bit c51
void * ptr; // 一般是;2 Bytes 按8bit c51
void fun(unsigned char * param) // 2 Bytes 按8bit c51;
说的可能太简单了,没有必要再讲的再细了。