linux内核里面有个container_of 方法(准确的说是个宏),可以根据结构体的某个字段的指针求得整个结构体的指针,感觉蛮新颖的,摘录下来。
#include <stdio.h>
#define offsetof(type, member) (size_t)&(((type*)0)->member)
/**
* container_of - cast a member of a structure out to the containing structure
* @ptr:»·the pointer to the member.
* @type:»the type of the container struct this is embedded in.
* @member:»the name of the member within the struct.
*
*/
#define container_of(ptr, type, member) ({ \
void *__mptr = (void *)(ptr); \
(type *)(__mptr - offsetof(type,member) );})
typedef struct person_t {
char name[100];
int age;
int weight;
} person_t;
void get_person_by_weight(int *wptr) {
struct person_t *pptr = container_of(wptr, struct person_t, weight);
printf("person: name=%s, age=%d, weight=%d\n", pptr->name, pptr->age, pptr->weight);
}
int main() {
person_t p = {
.name = "wzq",
.age = 23,
.weight = 126
};
get_person_by_weight(&(p.weight));
}