相关疑难解决方法(0)

在c中查找结构元素的偏移量

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

c struct

24
推荐指数
4
解决办法
3万
查看次数

((struct name*)0) - > member)在C中做什么?

((struct name*)0) - > member)在C中做什么?

我遇到的实际C语句是这样的:

(char *) &((struct name *)0)->member)
Run Code Online (Sandbox Code Playgroud)

c struct pointers

22
推荐指数
3
解决办法
1939
查看次数

C offsetof宏如何工作?

可能重复:
为什么这个C代码有效?
你如何在struct上使用offsetof()?

我在互联网上读到了这个偏移宏,但它没有解释它的用途.

#define offsetof(a,b) ((int)(&(((a*)(0))->b)))
Run Code Online (Sandbox Code Playgroud)

它想做什么以及使用它有什么好处?

c macros offset

11
推荐指数
3
解决办法
1万
查看次数

将指针移动到所需位置

我正在偏移我的指针,如下面的代码所示,以复制到另一个结构.

#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*)并复制结构的其余部分.

c

3
推荐指数
1
解决办法
109
查看次数

结构成员的地址之间的差异作为编译时间常量

struct A {
    int a;
    .
    .
    .
    int b;
} obj;
Run Code Online (Sandbox Code Playgroud)

const ptrdiff_t diff = &obj->b - &obj->a;

diff始终包含一个常量,即使程序运行多次也不会改变?

diff始终是积极的?

有没有办法在编译时获得这种差异?(手动计数除外)

c++ struct compile-time memory-address

1
推荐指数
1
解决办法
85
查看次数

标签 统计

c ×4

struct ×3

c++ ×1

compile-time ×1

macros ×1

memory-address ×1

offset ×1

pointers ×1