[英]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.