我将在其结构中实现一个带有位域的单链表程序,如下所示:
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 中读到了
我们不能指向位字段成员,因为它们可能无法启动 字节边界。
如果我为链表实现进一步编码会有问题吗?
答案 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.
但是你没有得到位域的地址 - 仅用于结构本身,它的大小和位置总是字节的倍数。