c - 如果已知偏移量,如何获取结构成员?

标签 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);
}

函数只是打印一些随机字符。指点的我开始头疼了...

最佳答案

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

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

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

关于c - 如果已知偏移量,如何获取结构成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16943084/

相关文章:

c - C 的哪些部分最便携?

c++ - 有没有办法以编程方式查找当前使用的 GPU(C、C++)?

c - 不兼容的指针错误,会计代码计算器

c++ - 重载运算符的返回值

c++ - 函数应该返回指向派生类还是基类的指针?

c++ - 查找指向数组最大值的指针

c - FFT 重新排序阶段

c - 使用 sleep() 时,timer_getoverrun() 的行为不符合预期

c - C指针的问题

c - 错误 : expected declaration specifiers or '...' before XXX (all kinds of parameters)