首页 > 解决方案 > 有人可以解释一下 C 中的类型转换吗?

问题描述

我已经关注了一段代码。我想了解的是,为什么我们要使用*(uint8 *)而不是 just进行类型转换*(uint8_t)

我只是对这两个有点困惑。任何解释都非常感谢。

uint8_t  read_8_function(uint8_t *addr);
uint16_t read_16_function(uint16_t *addr);
uint32_t read_32_function(uint32_t *addr);

int some_function(uint32_t size, uint32_t *value){

    uintptr_t some_addr = (uintptr_t *)0xaaaa5555;

    switch(size) {
        case 1:
               *(uint8_t *)value = read_8_function(some_addr);
        case 2:
               *(uint16_t *)value = read_16_function(some_addr);
        case 4:
               *value = read_32_function(some_addr);
    }

    return 0;
}

标签: cpointersdata-structurescastingtype-conversion

解决方案


value是指向 的指针uint32_t。强制转换将其转换为指向不同类型的指针;(uint8_t *)value将其转换为指向uint8_t. 然后取消引用,用于分配给该地址的 8 字节字段。

(uint8_t)value会将指针转换为 8 位整数。然后在*此之前将尝试使用该整数作为分配地址,这是无效的;你不能取消引用一个整数。此外,指针大于 8 位(在大多数现代 CPU 上它们是 32 位或 64 位),因此将指针转换为uint8_t会丢弃大部分指针的值。


推荐阅读