gpt4 book ai didi

c - 这是 "Type Punning"定义良好吗?

转载 作者:太空狗 更新时间:2023-10-29 15:24:23 25 4
gpt4 key购买 nike

我想知道,从指向不完整类型的指针或从指针强制转换是否是未定义的行为?

struct _obj;
typedef _obj obj;

typedef struct{
int val;
} obj_int;

void print_stuff(obj* o){
printf("%d\n", ((*obj_int)(o)) -> val);
}

最佳答案

通常。

标准 6.3.2.3/7:

A pointer to an object or incomplete type may be converted to a pointer to a different object or incomplete type. If the resulting pointer is not correctly aligned for the pointed-to type, the behavior is undefined. Otherwise, when converted back again, the result shall compare equal to the original pointer. When a pointer to an object is converted to a pointer to a character type, the result points to the lowest addressed byte of the object. Successive increments of the result, up to the size of the object, yield pointers to the remaining bytes of the object.

因此,如果 o 指向第一个成员是 int 的任何结构对象,就可以了。如果它指向从 malloc 获得的内存的开头,其中写入了 int 的表示形式,则没有问题。但如果它指向 char[sizeof(int)] 或类似的东西,您可能会遇到对齐问题。

关于c - 这是 "Type Punning"定义良好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18435012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com