假设我们有一个函数,它将双指针作为参数,我们想要修改该值:
void fun(uint8_t *arg1) {
*arg1 = 2;
}
int main(void) {
double a;
fun((uint8_t*)&a); // does not work
return 0;
}
这甚至可能吗?
答案 0 :(得分:1)
您指定的是未定义的行为:您无法将指针转换为其他类型。
最好的办法是在uint8_t
中创建main
,将指针传递给您的函数fun
,然后将该修改后的值分配给双精度。
答案 1 :(得分:1)
最简单的解决方案是使用临时变量:
double a;
uint8_t b = a;
fun(&b);
另一个解决方案是使用void*
并将使用过的类型告诉另一个参数:
void fun(void *arg1, int type) {
switch(type)
case TYPE_DOUBLE:
*(double*)arg1 = 2;
break;
case TYPE_UINT8:
*(uint8_t*)arg1 = 2;
break;
}
}
答案 2 :(得分:1)
void fun(uint8_t *arg1) {
double a = 2;
memcpy(arg1, &a, sizeof a);
}
答案 3 :(得分:1)
在arg1
内部变换fun
变量*(double *)arg1 = 2;