我可以将指针转换为char吗?

w41d8nur  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(213)

我可以将void*转换为char[]吗?这是非法的吗?我只想看一下位。我知道intptr_t,但我宁愿不使用在给定平台上可能存在也可能不存在的typedef。

wlzqhblo

wlzqhblo1#

我可以将指针转换为char吗?
是的,但这只在深奥的情况下有用,例如检查低位以查看对齐情况。
我可以将void* 转换为char[]吗?还是这是非法的?
转换为char []违反了C 2018 6.5.4 2中转换运算符的约束:
除非型别名称指定void型别,否则型别名称应该指定不可部分完成、限定或非限定标量型别,而且算子应该具有标量型别。
char []不是这些标量类型中的任何一种。
您可以强制转换为char *,但这样不会给予指针的字节数;它会给予你指向char的指针。
我知道intptr_t,但我不想使用typedef,因为它在给定的平台上可能存在,也可能不存在。
uintptr_t通常比intptr_t更可取,以避免符号引起的复杂化。在少数C实现中,它不存在。
然而,也可能有一些。为此,你可以不转换指针,而是将指针的地址转换为unsigned char *。这将给予你一个指向指针字节的新指针,然后你可以用它来检查那些字节。同样,最好使用无符号类型unsigned char *,以避免符号带来的复杂性。

相关问题