我想编写一个带有两个参数的函数:指向任意内存块的 void 指针类型和块字节大小。知道块中写入的数据的结构类型,该函数应该打印包含的值。
但是,起初,我建议的代码不起作用:
#define RECORD struct record
struct record {
char nam[32];
double val;
};
void xprint (void *p, long j)
{
j /= sizeof(RECORD);
RECORD r;
while(j--){
r = *((RECORD *)p++);
printf("\n..%s.., ..%lf..\n",r.nam, r.val);
}
return;
}
所以,我想出了一些替代方案,主要是在代码的递增部分:
void print (void *p, long j)
{
j /= sizeof(RECORD);
RECORD r = *((RECORD *)p);
while(j--){
printf("\n%s,\t%8.2lf\n",r.nam, r.val);
r = *(++(RECORD *)p);
}
return;
}
现在它完成了这项工作,但代码看起来仍然不那么紧凑。
经过一番检查,我发现问题出 r = *((RECORD *)p++);
在线路上。似乎当涉及到后缀递增时, p 不再是类型转换的,因此 p 仅递增一个字节。
是否可以重写 xprint 函数,以便我仍然使用后缀运算符,但应用于类型转换的指针?