在C文件的开头,我定义了两个类似的结构。

typedef struct
{
    char name[LEN];
    double price;
} book;

typedef struct
{
    void *addr;
    int num;
} Array;

Array book;

稍后,我使用malloc(sizeof(void *)*len)将内存分配给指针addr。void指针指向同时在堆中分配内存的book结构。
这样做之后,当我以这种方式在另一个函数中调用它时:
void print_view_of_books(Array books)
{
   int j;
   int limit = books.num;
   for(j=0; j<limit; j++)
   {
      book * bk = (book *)books.addr[j];
      printf("Book title: %s\n", bk->name);
      printf("Book price: %lf\n", bk->price);
      puts("----------------------");
   }

}

我的编译器说
错误:“void”类型的操作数,需要算术或指针类型。生成1个错误。
我发现表达式books.addr[j]有问题,如果我简单地用books.addr替换它,它就会工作。
有人能教我怎么解决这个问题吗?

最佳答案

这是一个运算符优先级问题。
book * bk = (book *)books.addr[j];更改为book * bk = ((book *)books.addr)[j];应该可以解决问题。

关于c - 结构中的指针“addr”已分配了内存,但是当我在另一个函数中调用它时,它将无法工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43499789/

10-12 17:07