【发布时间】:2021-09-13 01:16:16
【问题描述】:
void *vp = (void *)5;
uint8_t i = (uint8_t)vp;
i == 5 在所有 8 位和更高的 CPU 上都可以吗?这样做有什么风险?有没有更好的方法让变量存储 8 位整数文字或 C99 中的指针?
我有一个函数指针数组,指向带有 void * 的函数。有些函数需要将 void * 解释为 uint8_t。
【问题讨论】:
-
你为什么要这样做?
-
正确的做法是使用包含
void *和uint8_t的联合。这就是工会的用途。 -
如果要存储为整数类型,请使用
uintptr_t。 -
warning: initialization of ‘void *’ from ‘int’ makes pointer from integer without a castGCC 这么说,这并没有明确启用任何警告。同样根据@dbush 评论,您能否扩展您的问题,因为尚不清楚您要做什么或为什么。 -
@marko 是的,如果回调都将指针作为参数并使用指针作为指针,那很好。我还没有看到参数是指针或其他任意类型的回调。这不是一个标准的习语,它通常被称为意大利面条代码。
标签: c language-lawyer platform-agnostic