gpt4 book ai didi

c - 结构中的指针 "addr"已分配内存,但当我在另一个函数中调用它时,它无法工作

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:58 25 4
gpt4 key购买 nike

在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("----------------------");
}

}

我的编译器说

error: operand of type 'void' where arithmetic or pointer type is required. 1 error generated.

我发现表达式 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com