繁体   English   中英

结构中的指针“ addr”被分配了内存,但是当我在另一个函数中调用它时,它将无法工作

[英]A pointer “addr” in a struct was allocated memory but when I call it in another function, it can't work

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

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

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

Array book;

稍后,我使用malloc(sizeof(void *)*len)将内存分配给指针addr void指针指向一个书结构,该书结构也在堆中分配了内存。

完成此操作后,当我以这种方式在另一个函数中调用它时:

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]; 应该解决问题。

错误:类型为“ void”的操作数,其中需要算术或指针类型。 产生1个错误。

您正在不允许的void指针(addr [j])上使用指针算术。

首先,您必须强制转换void指针

((book *)(books.addr))

然后取消引用

((book *)(books.addr))[j]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM