这个程序可以运行,也是正确的。
下面我来一步一步分析下语句,你就会知道原理了。
unsigned char *D1,*D2,*D3;这句是声明三个指针变量 ,unsigned char 型的指针。编译器在这一步就会分配三个地址,用来存放这三个指针。假设分析的地址是:0x08,0x0B,0x2E.因为单片机内存较小,所以只用一个字节来存放指针,也有的单片机内存较大,就用二个字节。
D1=0x20;//分别指向相应的地址。
D2=0x30;
D3=0x40;
这三句是将指针指向特定地址,D1其实可以看成刚才分配的地址值,0x08;D2可以看成是分析的地址0x0B,D3同理。到这一步,0x08,里面存放的内容就变成了0x20;0x0B里存放的值是0x30,0x0E里存放的值是0x40。
*D1,*D2,*D3表示址址D1,D2,D3里存放地址里存放的内容。也就是0x20,0x30,0x40里存放的内容。
if((*D1)>=(*D2))
{
*D3 = *D2; //将较小的数存到D3所指向的空间(0x40)
}
else
{
*D3 = *D1;
}
这段程序是对0x20,0x30里存放内容进行比较,较小的放于0x40里面。
你说的标准C里指针不能赋值常数,与此处不同,请再参考。