我创建了一个特定的结构,然后按照以下方式为该结构创建一个数组:
struct members
{
char name[32];
intmax_t personalID;
}typedef struct members Member;
Member array_member[100];
后来,我想知道数组中有多少个元素,根据我读到的一些答案,这应该足够了
int nrofmembers = sizeof(array_member) / sizeof(array_member[0]);
但是根据我的经验,我知道如果数组本身是一个参数,这是不可能的。所以我尝试了这个:
int nrofmembers = sizeof(*array_member) / sizeof(array_member[0]);
不幸的是,事实证明这是错误的。此后的nrofmembers值为1,但这不是真的。
有关如何执行此操作的任何建议?
答案 0 :(得分:1)
如果有指针,则不能使用此简单的编译时方法。您需要将数组的大小传递给函数
在C中,即使您的声明是... foo(Member arr[])
或... foo(Member arr[100])
struct members
{
char name[32];
intmax_t personalID;
}typedef struct members Member;
Member array_member[100];
int foo(Member *arr, size_t size)
{
/* .... */
}
int main()
{
/* correct */
foo(array_member, sizeof(array_member) / sizeof(array_member[0]));
printf("Hello World");
return 0;
}