如何找出为结构创建的数组中的元素数量?

时间:2019-04-03 21:07:25

标签: c arrays struct

我创建了一个特定的结构,然后按照以下方式为该结构创建一个数组:

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,但这不是真的。

有关如何执行此操作的任何建议?

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;
}