首页 > 其他分享 >container_of宏

container_of宏

时间:2023-04-07 10:57:02浏览次数:32  
标签:container struct age person 体中 ptr

  在 C 语言中,container_of 是一个宏定义,可以通过指向结构体中的成员来获取该结构体的地址。它的定义如下:

#define container_of(ptr, type, member) \
    ((type *)((char *)(ptr) - offsetof(type, member)))

  其中,ptr 是指向结构体中某个成员的指针,type 是结构体类型,member 是结构体中的成员名。

  使用 container_of 宏时,需要注意以下几点:

  1. 确保 ptr 指针是有效的,并且指向的是结构体中的成员。
  2. 确保 member 成员在结构体中的偏移量是已知的,可以使用 offsetof 宏来获取。
  3. 确保 type 是正确的结构体类型,否则可能会导致未定义的行为和内存错误。

  下面是一个示例,演示如何使用 container_of 宏:

 1 #include <stddef.h>
 2 #include <stdio.h>
 3 
 4 struct person {
 5     char name[20];
 6     int age;
 7 };
 8 
 9 int main() {
10     struct person p = {"Alice", 25};
11     int *age_ptr = &p.age;
12 
13     // Get the address of the containing struct
14     struct person *person_ptr =
15         container_of(age_ptr, struct person, age);
16 
17     // Print the name and age
18     printf("Name: %s\nAge: %d\n", person_ptr->name, person_ptr->age);
19 
20     return 0;
21 }

  这个例子创建了一个名为 person 的结构体,其中包含一个名为 name 的字符串和一个名为 age 的整数。然后,它创建了一个指向 age 成员的指针,并使用 container_of 宏获取包含此成员的结构体的地址。最后,它打印出该结构体中的 nameage 值。

标签:container,struct,age,person,体中,ptr
From: https://www.cnblogs.com/codingmengmeng/p/17295452.html

相关文章

  • element-plus中Container 布局容器左右留白
    index.vue代码如下:<scriptlang="ts"setup></script><template><el-containerclass="layout"><el-asideclass="aside"width="200px">Aside</el-aside><el-contain......
  • Containerd接入Harbor仓库【3】
    1.说明在使用容器时,避免不了会使用到私有仓库,一般都是采用harbor作为私有仓库,docker对接harbor仓库非常简单,哪containerd如何对接harbor呢?在内网使用harbor根据个人习惯,一般都是非http并且是通过IP直接访问,如下:harbor仓库地址为:http://192.168.199.102:80,cont......
  • Containerd高阶命令行工具 - nerdctl 【2】
    1.前言对于用惯了dockercli的用户来说,containerd的命令行工具ctr使用起来不是很顺手,此时别慌,还有另外一个命令行工具项目nerdctl可供我们选择。nerdctl是一个与dockercli风格兼容的containerd的cli工具。nerdctl已经作为子项目加入了containerd项目,它的github地址是https:/......
  • containerd命令--ctr和crictl
    ctr[root@master~]#ctr--helpNAME:ctr-containerdCLIUSAGE:ctr[globaloptions]command[commandoptions][arguments...]VERSION:v1.6.19DESCRIPTION:ctrisanunsupporteddebugandadministrativeclientforinteractingwiththeconta......
  • Containerd的使用
    我们知道很早之前的DockerEngine中就有了containerd,只不过现在是将containerd从DockerEngine里分离出来,作为一个独立的开源项目,目标是提供一个更加开放、稳定的容器运行基础设施。分离出来的containerd将具有更多的功能,涵盖整个容器运行时管理的所有需求,提供更强大的......
  • K8s 弃用 Docker!一文介绍 containerd ctr、crictl 使用
    containerd是一个高级容器运行时,又名容器管理器。简单来说,它是一个守护进程,在单个主机上管理完整的容器生命周期:创建、启动、停止容器、拉取和存储镜像、配置挂载、网络等......
  • [ant-design] a-select,a-date-picker 下拉菜单不跟着滚动走(getPopupContainer)
    问题:a-select<a-select:getPopupContainer="(triggerNode)=>triggerNode.parentNode"></a-select>a-date-picker<a-date-picker:getCalendarContainer="(triggerNode)......
  • 什么是 sap.ushell.Container
    sap.ushell.Container是一个SAPFioriLaunchpad的JavaScriptAPI,它提供了访问Launchpad功能和服务的方法和属性。Container对象由SAPFioriLaunchpad创建并提供......
  • Element UI布局容器中<el-container>的一个问题
    <el-container>:外层容器。当子元素中包含 <el-header> 或 <el- footer> 时,全部子元素会垂直上下排列,否则会水平左右排列。所以需要一个<el-header>或<el-footer>......
  • container和主机(host)之间的文件拷贝
    [b]1.从container到主机(host)[/b]使用dockercp命令dockercp<containerId>:/file/path/within/container/host/path/target比如安装mysql之后,复制的到my.cnfdock......