Struct 当在一个结构中考虑两个不同的整数时,返回的值将包含什么

Struct 当在一个结构中考虑两个不同的整数时,返回的值将包含什么,struct,macros,Struct,Macros,假设我们定义了一个结构T struct T { int a, b; }; 如果b的地址为0x8b3000c,且sizeof(int)为4。调用时,container\u of()返回的值是linux内核代码中的宏,它计算容器的地址 例如,在你的情况下 struct T { int a, b; }; 在b的地址上应用container\u的,将产生struct的地址 struct T *pT = container_of(ptr_b, struct T, b); 其中ptr_b将保存

假设我们定义了一个结构T

struct T {
int a, b;
};

如果b的地址为0x8b3000c,且sizeof(int)为4。调用时,
container\u of()返回的值是linux内核代码中的宏,它计算容器的地址

例如,在你的情况下

struct T {
    int a, b;
};
b的地址上应用
container\u的
,将产生
struct的地址

struct T *pT = container_of(ptr_b, struct T, b);
其中
ptr_b
将保存b的地址,
&b

通常,当我们使用标识符时,我们不会关心得到的物理值,比如
0x8b3000c

由于您对物理感兴趣,由于两个成员都是大小为4的
int
,忽略填充,pT将具有
(Ox8b3000c-4)=Ox8b30008


但是,请不要在编码时做出这样的假设,,结构可能会被填充。使用
sizeof

总是好的,对不起,我是noob。我想了解这一点。你能澄清一下吗。那么您的意思是将返回struct T的地址(某个值)?那么struct T的这个地址大概是什么样子的呢?请看这个,您会理解这里的返回值是Ox8b30008吗?这里的pT是什么?谢谢指向T的指针,它将是结构的起始位置我仍然感到困惑。你是从哪里得到这个“Ox8b3000c”的?我提到b的地址是0x8b3000c。。