2017-09-08 2 views
-1

Ich werde eine einfach verkettete Liste Programm mit bitfield in seiner Struktur implementieren, etwa so:Ist es in Ordnung, Bitfelder in der dynamisch zugewiesenen Struktur in C zu verwenden?

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; 
} 

Das obige Programm wird richtig arbeiten, aber ich lese in GeeksForGeeks, dass,

Wir können Zeiger auf Bitfeldelemente nicht haben, da sie möglicherweise nicht bei eine Bytegrenze beginnen.

Wird es Probleme geben, wenn ich es weiter für die Implementierung der verknüpften Liste codiere?

+2

Was genau ist das Problem? Sie haben keine Hinweise auf Bitfeld-Mitglieder. –

+1

Sie sind sich bewusst, dass Sie dadurch nichts retten können, oder? Und warum willst du Bitfields überhaupt benutzen? Sie machen nur Sinn, um Speicher zu sparen, sind Sie auf einer stark speicherbegrenzten Plattform? – Olaf

+0

In C müssen Sie das Ergebnis der Rückgabe von malloc nicht eingeben – MCG

Antwort

3

Der Zeiger g in Ihrem Programm ist ein Zeiger auf eine Strukturvariable, der Sie Speicher dynamisch zugewiesen haben.

g->number ist nicht die Adresse des Mitglieds number aber sein Wert.

Sie keinen Zeiger wie

unsigned char *ptr=&(g->number); 

sollten Sie einen Fehler wie cannot take address of bit-field

0

malloc-ing alle Strukturen, einschließlich solche mit bitfields haben absolut OK ist

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

Aber du bekommst die Adresse des Bitfeldes nicht - nur für die Struktur selbst und ihre Größe und Position ist immer ein Vielfaches von Byte.

Verwandte Themen