[英]Dereferencing a void pointer
我有以下代码:
#include <inttypes.h>
#include <stdlib.h>
struct a
{
void *p;
};
int main(void)
{
struct a *ptr = malloc(sizeof(struct a));
ptr->p = malloc(sizeof(uint8_t));
*((uint8_t *) ptr->p) = 2;
return 0;
}
我在取消引用之前强制转换void指针以避免警告
警告:取消引用“ void *”指针
我是在违反规则吗,还是这段代码不错?
是的,此代码是合法的,不会引起未定义的行为(除非malloc
返回NULL
)。
按照标准要求,此代码看起来不错。 指向字符类型的指针可用于指向对象而不会违反别名规则。
要引用该标准,请参见第6.3.2.3章
[...]。 当指向对象的指针转换为指向字符类型的指针时,结果指向该对象的最低寻址字节。 结果的连续递增(直到对象的大小)会产生指向对象剩余字节的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.