在C中动态分配结构中使用位域是否可以?

时间:2017-09-08 14:53:37

标签: c struct linked-list malloc bit-fields

我将在其结构中实现一个带有位域的单链表程序,如下所示:

typedef struct large
{
    unsigned number :4;
    struct large *next;
} large;

int main()
{
    large *g;
    g=(large *)malloc(sizeof(large));

    g->number=15;
    printf("%d",g->number);

    return 0;
}

以上程序正常工作但我在 GeeksForGeeks 中读到了

  

我们不能指向位字段成员,因为它们可能无法启动   字节边界。

如果我为链表实现进一步编码会有问题吗?

2 个答案:

答案 0 :(得分:3)

程序中的指针g是指向动态分配内存的结构变量的指针。

g->number不是成员number的地址,而是其值。

你不能有像

这样的指针
unsigned char *ptr=&(g->number);

你应该收到类似cannot take address of bit-field

的错误

答案 1 :(得分:0)

mallocing任何结构,包括那些包含位域的结构都是可以的

We cannot have pointers to bit field members as they may not start at a byte boundary.

但是你没有得到位域的地址 - 仅用于结构本身,它的大小和位置总是字节的倍数。