elemento de cuerpo C offsetof- valor de desplazamiento de la estructura de computación

1. Papel:

El miembro de cuerpo de la estructura de valor calculado compensar


2. Uso de la escena:

estructuras de tipo de nodo en el cuerpo pueden ser definidos en la estructura de datos, correspondientes a las estructuras de datos incrustados


3. Ejemplos de (estructura de datos de lista incrustado):

Código de ejemplo:

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>


typedef struct ListNode {
    struct ListNode *next;
} ListNode;


struct Demo {
    int data;
    ListNode node;
};


int main(int argc, char **argv) {
    struct Demo demo1 = {1, NULL}; 
    struct Demo demo2 = {2, NULL};
    struct Demo demo3 = {3, NULL};




    demo1.node.next = &demo2.node;


    demo2.node.next = &demo3.node; 


    ListNode *node = &demo1.node;
    while (node) {
        struct Demo *demo = (struct Demo*)((char*)node - offsetof(struct Demo, node));
        printf("demo data : %d\n", demo->data);
        node = node->next;
    }   
    
    return 0;
}

Se define como una simple estructura de datos de lista NodoLista normal de ahora se definirá en la demostración NodoLista, cada nodo de conformidad estructura de datos NodoLista Demostración de montaje,

Al atravesar la investigación no tiene nada que ver con la Demo, solamente necesitan tener acceso a los miembros de datos de demostración puede basarse directamente en la estructura de datos del nodo por nodo para obtener offsetof

Publicados 140 artículos originales · ganado elogios 28 · vistas 180 000 +

Supongo que te gusta

Origin blog.csdn.net/qq_16097611/article/details/79579658
Recomendado
Clasificación