struct a
{
struct b
{
int i;
float j;
}x;
struct c
{
int k;
float l;
}y;
}z;
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释我如何找到偏移量,int k以便我们可以找到地址int i?
((struct name*)0) - > member)在C中做什么?
我遇到的实际C语句是这样的:
(char *) &((struct name *)0)->member)
Run Code Online (Sandbox Code Playgroud) 我在互联网上读到了这个偏移宏,但它没有解释它的用途.
#define offsetof(a,b) ((int)(&(((a*)(0))->b)))
Run Code Online (Sandbox Code Playgroud)
它想做什么以及使用它有什么好处?
我正在偏移我的指针,如下面的代码所示,以复制到另一个结构.
#include <stdio.h>
struct a
{
int i;
};
struct test
{
struct a *p;
int x,y,z;
};
int main()
{
struct test *ptr = malloc(sizeof(struct test));
struct test *q = malloc(sizeof(struct test));
ptr->x = 10;
ptr->y = 20;
ptr->z = 30;
memcpy(&(q->x),&(ptr->x),sizeof(struct test)-sizeof(struct a*));
printf("%d %d %d\n",q->x,q->y,q->z);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做我的memcpy()?我的问题是,如果我认识到结构的成员并想要移动我的指针sizeof(struct a*)并复制结构的其余部分,该怎么办?
编辑:
我想复制结构的某些部分,但我不知道其中的成员,但我知道我想跳过某些类型的变量,如示例中所示(struct a*)并复制结构的其余部分.
struct A {
int a;
.
.
.
int b;
} obj;
Run Code Online (Sandbox Code Playgroud)
const ptrdiff_t diff = &obj->b - &obj->a;
将diff始终包含一个常量,即使程序运行多次也不会改变?
将diff始终是积极的?
有没有办法在编译时获得这种差异?(手动计数除外)