目前在类里面,我们正在学习 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,具体取决于平台。
关于对将字符传递给函数参数时何时使用 int 类型或 char 类型感到困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22754021/