先提供一段程序代码(希望读取某特定地址的值)
unsigned int adddress; //定义一个变量作为地址
unsigned char value; //地址中的值
unsigned char *p;
address=0x1111;
p=(unsigned char *)address;
value=*p;
根据指针的定义,定义指针变量unsigned char *p,给p赋值应该是变量地址的值,从而使指针指向这个变量,例如定义变量unsigned char a,为了使指针指向a,应该有这样的赋值语句:p=&a
在以上程序中,address已经是地址的值,从理论上讲应该直接让p=address,就可以让指针指向地址为address的变量,但是这样是不行的。因为p是指针变量,而address是普通变量,他们不能直接赋值的。
在程序中使用了p=(unsigned char *)address的赋值方法,通过(unsigned char *)将address转换成指针变量,其实只是作为一种转换方式,没有其他特殊的含义,这样之后p的值就是address的值,即0x1111。注意(unsigned char *)address与*address的含义是不一样的。
另外还应注意的是定义指针变量unsigned char *p的含义是p所能指向的是char型,而与p本身是没有关系的。由于本程序希望得到的是address地址中一个字节的值,所以定义了char型,因此也就定义了char型指针变量。