1

所以,我有一个结构

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

函数只是打印一些随机字符。由于指针,我开始头疼...

4

1 回答 1

7

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

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

char *str1 = *(char **)(data1 + offset);
于 2013-06-05T14:56:28.107 回答