目前在课堂上我们正在学习c的指针,地址和volatile。在一个例子中,我们有以下两个函数,可用于使用Altera DE2板将字符绘制到VGA监视器上。
对于下面的代码,使用了int字符,但我和我的同事认为它应该是char字符,因为我们将一个字符传递给函数参数。
void drawChar( int x, int y, int character )
{
volatile unsigned char *pChar;
pChar = getCharAddr(x,y);
*pChar = ( character & 0x7f );
}
unsigned char *getCharAddr( int x, int y )
{
y = max(0,min(MAX_Y_CHARS-1,y));
x = max(0,min(MAX_X_CHARS-1,x));
return (unsigned char *)(ADDR_CHARBUF + (((y<<MAX_X_CHAR_BITS)|(x))<<0));
}
下面是一个使用函数drawChar的示例代码:
drawChar( x, y, ‘D’ ); // draws ‘D’ at <x,y>!
谁能解释一下为什么这里用int ?
我们认为这与屏蔽和必须从字符中获得二进制值有关……虽然我们不确定。
如果您将字符类型替换为char,您将收到相同的结果。char、int、short等都是整型。写这个函数的人,是唯一一个可以告诉你为什么他们在这种特殊情况下选择int的人,但是你和你的同事是正确的,通常最好使用char,因为它代表了数据的目的。在底层,根据平台的不同,该char最终可能会被提升为int。