注册 登录
编程论坛 C语言论坛

void *rBuffer和

zz4611100 发布于 2021-08-05 16:43, 1676 次点击
BOOL APIENTRY getPrintIDStatus( WORD pageID, void *rBuffer, WORD *rResult )

请问这个  void *rBuffer是什么意思
6 回复
#2
zz46111002021-08-05 16:44
还有*(WORD*)&bstatus[0]

麻烦各位大佬解答了
#3
纯蓝之刃2021-08-05 19:38
*(WORD*)&bstatus[0]

一般会定义 char bstatus[20];
取bstatus[0]的地址,并强制转化为WORD*指针,然后取该WORD*指针指向的内容,也就是两个字节长度的内容,就是bstatus[0],bstatus[1]的内容。
void *rBuffe

void *可以接收到的指针类型为任意指针,在具体使用时在转化为需要的指针类型,例如char*,int*。
#4
rjsp2021-08-06 08:41
*(WORD*)&bstatus[0]
这是一种错误用法,违反了“类型别名使用规则”。
在C中,应该使用 memcpy;在C++中,可以使用 std::bit_cast。

“类型别名使用规则”比较复杂,
C语言参见 https://zh.
C++语言参见 https://zh. 中间的“类型别名化”那一段描述
#5
我善治鬼2021-08-06 09:06
我来说一下这里的错误
BOOL APIENTRY getPrintIDStatus( WORD pageID, void *rBuffer, WORD *rResult )
void *rBuffer, WORD *rResult
这两个参数没有定义输出或输入说明符, 不知到底是输出还是输入
void *rBuffer 这个没有类型定义, 不知道到底是什么格式
*(WORD*)&bstatus[0]    这个既然需要强制转换类型了, 为什么不直接定义为WORD类型
#6
diycai2021-08-06 11:12
void *rBuffer 意思是你可以传入任何类型的指针。 void *用在函数参数中,可以使调用者很舒服。 比如memcpy函数, 你可以copy任意不同类型的两个指针指向的数据,而不用在传参时强制转换为固定的类型。

*(WORD*)&bstatus[0] 其实写成 *(WORD*)bstatus 更直观。
#7
星泪成寒2021-08-06 14:57
一个关于C语言声明的网站 https://
#8
自由而无用2021-08-09 17:08
void *rBuffer stream buffer for reading interface
uint8_t *buffer = (uint8_t *)rBuffer;

*(WORD*)&bstatus[0];
eg &bstatus[0] = 0x12ff9c; uint16_t *p = (uint16_t *)0x12ff9c;
int do_sth(uint16_t *array); do_sth(p);
1