代码之家  ›  专栏  ›  技术社区  ›  Val

将整个结构指针数组传递给函数的语法是什么?[已关闭]

  •  -3
  • Val  · 技术社区  · 6 年前

    我真的很困惑,向函数传递结构指针数组的正确语法是什么?为了能够访问每一个,例如BookList[0]、BookList[5]或BookList[8]。

    这是我的结构和指针数组;

    struct Book{
    char Category[20];
    int ID;
    char BookName[40];
    char Author[10];};
    
    
    struct Book *BookList[10];
    

    假设我创建了一个新的void函数;

    void ListBooks();
    

    现在,参数语法是什么?是书单[]吗?是书单吗;抱歉,但我是一个极端的新手,只是想学习。

    2 回复  |  直到 6 年前
        1
  •  1
  •   John Stone    6 年前

    我认为使用struct Book**bookList作为参数更为明确。

        2
  •  0
  •   August Karlstrom    6 年前

    函数的形式数组参数 列表簿 应该是 struct Book **bookList struct Book *bookList[] 后者只是句法上的糖;在这两种情况下,只有第一个元素的地址被传递给函数。这意味着无法判断函数中数组参数的长度。因此,我们还需要将数组的长度作为第二个参数传递。总结:功能外 列表簿 您的阵列 图书目录 是由十个元素组成的数组;在…内 列表簿 形式参数 图书目录 只是一个指针(指向结构的指针)。

    当我们将数组的长度传递给 列表簿 我们不想重复值10。因此,可以方便地定义如下代码所示的长度宏。

    #define LEN(array) (sizeof (array) / sizeof (array)[0])
    
    struct Book {
        char Category[20];
        int ID;
        char BookName[40];
        char Author[10];
    };
    
    void ListBooks(struct Book *bookList[], int bookListLen)
    {
        ...
    }
    
    
    int main(void)
    {
        struct Book *bookList[10];
    
        ...
        ListBooks(bookList, LEN(bookList));
        return 0;
    }