我真的很困惑将结构指针数组传递给函数的正确语法是什么?为了能够访问每一个,例如, 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];道歉,但我是一个极端的新手,只是想学习。
答案 0 :(得分:1)
我认为使用struct Book ** bookList作为参数更为明确。
答案 1 :(得分:0)
函数 ListBooks 的正式数组参数应该是struct Book **bookList
或struct 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;
}