将double传递给期望uint8_t *的函数

时间:2014-08-18 10:27:03

标签: c casting

假设我们有一个函数,它将双指针作为参数,我们想要修改该值:

void fun(uint8_t *arg1) {
    *arg1 = 2;
}

int main(void) {
    double a;
    fun((uint8_t*)&a); // does not work

    return 0;
}

这甚至可能吗?

4 个答案:

答案 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;