如果知道偏移,如何获得结构的成员?

时间:2013-06-05 14:52:25

标签: c pointers

所以,我有一个结构

struct foo
{
  int a;
  int b;
  int c;
  char *string;
};
typedef struct foo foo;

我有一个功能

void fun(void *data1, void *data2, int offset){
  int num1 = *(int *)(data1 + offset);
  int num2 = *(int *)(data2 + offset);
  printf("%d %d\n", num1, num2);
}

它很棒。但是当我尝试用字符串做同样的事情时,出了点问题。

void fun(void *data1, void *data2, int offset){
  char *str1 = (char *)(data1 + offset);
  char *str2 = (char *)(data2 + offset);
  printf("%s %s\n", str1, str2);
}

功能只打印一些随机字符。我因为指针而开始变得头痛......

1 个答案:

答案 0 :(得分:7)

char *的地址+偏移是指向的指针 - char *,换句话说,它是char **(就像在你的工作部分一样) ,int的地址+偏移量是指向的指针 - int,即它是int *)。

因此定义和aceess需要在类型中有一个额外的间接,即char **

char *str1 = *(char **)(data1 + offset);