[英]Can someone explain following type casting in C?
我已经关注了一段代码。 我想了解的是,为什么我们要使用*(uint8 *)
而不是*(uint8_t)
进行类型转换?
*(uint8_t *)value
读作: value
is ptr to uint8_t
ptr and*(uint8_t)value
读作: value
is ptr to 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;
}
value
是指向uint32_t
的指针。 强制转换将其转换为指向不同类型的指针; (uint8_t *)value
将其转换为指向uint8_t
的指针。 然后取消引用,用于分配给该地址的 8 字节字段。
(uint8_t)value
会将指针转换为 8 位 integer。 然后将*
放在前面会尝试使用 integer 作为分配地址,这是无效的; 您不能取消引用 integer。 此外,指针大于 8 位(在大多数现代 CPU 上它们是 32 位或 64 位),因此将指针转换为uint8_t
会丢弃大部分指针的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.