簡體   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