我正在编写的C程序的一部分包括使用sc_memset()函数初始化输入表。该表由typedef结构定义,如下所示。
typedef struct {
UINT32 switchnum;
UINT32 feedback[8];
UINT32 switch_output[8];
} SWITCH_CHECK_IN;
SWITCH_CHECK_IN switch_input_table;
所有表元素,即switchnum,feedback和switch_output应该初始化为零。用于初始化的sc_memset函数原型为:
extern void sc_memset (volatile unsigned char *dest, unsigned long n, unsigned char data);
我已经编写了初始化代码,并且由于SWITCH_CHECK_IN和volatile unsigned char中的类型不同,我尝试按照以下方式进行一些强制转换(我尝试了几种强制转换语句),但是每次我都从指针类型不兼容'错误。
while( *(volatile unsigned char *) &switch_input_table) {
{
sc_memset( &switch_input_table, sizeof(switch_input_table), 0 );
}
我是C语言的新手,所以我不确定我的一般方法是否正确。好的,1.我哪里出问题了?你能告诉我正确的方法吗?2.可以使用哪些其他方法?提前致谢。
您需要将结构体的指针转换为指向无符号字符的指针,就像在while
条件下所做的一样:
sc_memset( (unsigned char*)&switch_input_table
,...
您不应该在类型转换中使用volatile
-该函数将volatile
类型限定符隐式添加到传递的参数中。为什么它有volatile
,我不知道-它是可疑的代码,除非该函数需要硬件寄存器等作为输入。