当前位置: 首页 > article >正文

【学习笔记】【内核】container_of 的用法

根据结构体变量成员的指针获取整个结构体的指针

#include <stdio.h>                                                                                                                                                                                             2 #include "stdlib.h"
#include "string.h"

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({ \
    const typeof( ((type *)0)->member ) *__mptr = (ptr); \
    (type *)( (char *)__mptr - offsetof(type,member) );})

struct person {
    char name[10];
    int age;
    int height;
    int weight;
};

void show_person(struct person *per)
{
    printf("name = %s\n", per->name);
    printf("age = %d\n", per->age);
    printf("height = %d\n", per->height);
    printf("weight = %d\n", per->weight);
}

int get_addr(char *name)
{
    struct person *per;

    printf("name = %p\n", name);
    per = container_of(name, struct person, name);
    printf("per = %p\n", per);
    show_person(per);
    return 0;
}

int main()
{
    struct person *per = NULL;

    per = (struct person*)malloc(sizeof(struct person));
    printf("per = %p\n", per);

    strcpy(per->name, "wang");
    per->age = 18;
    per->height = 168;
    per->weight = 120;

    printf("test\n");
    get_addr(per->name);
    return 0;
}

container_of 可以根据结构体成员的地址找到整个结构体的地址,但是前提是结构体的空间要是连续的


http://www.kler.cn/a/231244.html

相关文章:

  • 灵芝黄金基因组注释-文献精读109
  • 【Python蓝桥杯备赛宝典】
  • 使用vhd虚拟磁盘安装两个win10系统
  • Day24-【13003】短文,数据结构与算法开篇,什么是数据元素?数据结构有哪些类型?什么是抽象类型?
  • 力扣017_最小覆盖字串题解----C++
  • PCA9685 一款由 NXP Semiconductors 生产的 16 通道、12 位 PWM(脉宽调制)控制器芯片
  • 悬而未决:daterangepicker设置默认选择日期时间后点确认无值的BUG
  • idea设置terminal为git
  • vue3:25—其他API
  • 多路服务器技术如何处理大量并发请求?
  • Golang 基础 Go Modules包管理
  • chrome扩展插件常用文件及作用
  • 第三百一十三回
  • Go基础学习笔记-01
  • 【C语言】(13)堆和栈
  • 【推荐算法】userid是否需要建模
  • PCIE Order Set
  • excel统计分析——成组数据秩和检验
  • 秘塔科技推出AI搜索产品「秘塔AI搜索」
  • Windows 安装 MySQL 最新最简教程
  • 【AG32VF407】国产MCU+FPGA,更新官方固件解决8Mhz内部晶振不准,Verilog实测7.9Mhz!
  • ubuntu 安装 kvmQemu no active connection to install on
  • 百卓Smart管理平台 uploadfile.php 文件上传漏洞复现(CVE-2024-0939)
  • 第三百一十二回
  • 浏览器F12调试
  • QT设置qss