如何将void指针转换为指向多个struct?

时间:2013-08-31 11:50:45

标签: c

有关如何使用其他函数的void指针访问其他结构元素的问题??

typedef struct
{
char Buf[20];
char Str[20];
}Sample;
typedef struct
{
char Data[20];
int  i;
} Test;

无效指针结构

typedef struct
{
void *New;
int j;
} Datastruct;


 int main()
    {
           //i am confused with first line
            Datastruct->New = &Sample;
            strcpy((( sample*)Datastruct->New )->Buf,"adam");
            printf(" Datastruct->New->Buf");
            Datastruct->New = &Test;
            strcpy((( Test*)Datastruct->New)->Data,"Eve");
            printf("Datastruct->New->Data");
            return 0;
        }

请让我知道如何通过void指针访问其他结构的成员

2 个答案:

答案 0 :(得分:2)

编译器也对第一行感到困惑;你不能拿一个类型的地址。至于跟随void指针,你有正确的想法:把它投射到你想要它的指针类型。

答案 1 :(得分:1)

这是一个固定版本,实际编译和工作没有错误:

#include <string.h>
#include <stdio.h>

typedef struct {
  char Buf[20];
  char Str[20];
} Sample;

typedef struct {
  char Data[20];
  int i;
} Test;

typedef struct {
  void *New;
  int j;
} Datastruct;

int main() {
  Datastruct d;
  Sample s;
  d.New = &s;
  strcpy(((Sample*)d.New )->Buf,"adam");
  printf("Datastruct->New->Buf\n");
  Test t;
  d.New = &t;
  strcpy(((Test*)d.New)->Data,"Eve");
  printf("Datastruct->New->Data\n");
  return 0;
}

在原作中,您将->.和类型(例如Datastruct)混淆为该类型的变量。