将整个struct指针数组传递给函数的语法是什么?

时间:2018-04-23 07:39:29

标签: c struct parameters

我真的很困惑将结构指针数组传递给函数的正确语法是什么?为了能够访问每一个,例如, 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();

现在,参数语法将如何?是BookList []吗?是它* BookList [10];道歉,但我是一个极端的新手,只是想学习。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

函数 ListBooks 的正式数组参数应该是struct Book **bookListstruct Book *bookList[]。后者只是语法糖;在这两种情况下,只将第一个元素的地址传递给函数。这意味着无法告诉函数内部数组参数的长度。出于这个原因,我们还需要将数组的长度作为第二个参数传递。总结一下:在函数 ListBooks 之外,你的数组 bookList 是一个包含十个元素的数组;在 ListBooks 里面,形式参数 bookList 只是一个指针(指向结构的指针)。

当我们将数组的长度传递给 ListBooks 时,我们不想重复值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;
}