首页 > 解决方案 > 如何找出为结构创建的数组中的元素数量?

问题描述

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

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,但事实并非如此。

关于如何做到这一点的任何建议?

标签: carraysstruct

解决方案


如果你有指针,你就不能使用这个简单的编译时方法。您需要将数组的大小传递给函数

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

推荐阅读