【发布时间】:2019-06-05 20:27:08
【问题描述】:
struct my_struct {
int p;
uint32_t *a;
...
};
struct my_struct *aa;
...
struct b {
uint8_t b;
...
};
struct b *bb;
此时bb和aa已经初始化,bb包含有效值。
aa->a = &bb->b;
但是这会导致编译器警告,这是有道理的:
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
执行以下操作是否安全?
aa->a = (uint32_t *)&bb->b;
【问题讨论】:
-
您为什么要尝试将
uint8_t*分配给uint32_t*? -
一般?不,因此类型错误。你为什么要这样做?
-
我正在编写一个应用程序,它打开一个
netlink套接字并与 Linux 内核子系统一起工作。现在,数据可能作为 netlink 标头之后的标头的一部分(并且该标头是 UAPI,其中对象是u8),或者数据可能以 32 位长 TLV 属性的形式出现,因此我有a在 my_struct 中属于uint32_t类型。 -
那为什么不使用
union或void*呢?另外,也许我误解了,但这并不能真正解释为什么您要强制分配 指针 而不是整数值本身。 -
@jamesdlin,我正在使用的应用程序不会为那些
my_struct成员分配内存,而是分配指向netlink缓冲内存的指针,从recv()获得。这只是我必须处理的设计。
标签: c pointers assignment-operator