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

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

关于如何做到这一点有什么建议吗?

最佳答案

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

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

关于c - 如何找出为结构创建的数组中元素的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55504288/

相关文章:

json - 动态创建某种类型的结构并将 JSON 解码到该实例中

c - 如何阻止 GCC 组合共享相同后缀的字符串文字?

c - 内存受限系统中的数组

java - 如何在 Java 中从包含数字的文件创建数组?

javascript - 动态模板在 ng-repeat 上添加空值

c - C 中表达式 (!array_name[index]) 的含义是什么?

c# - 从结构继承

c++ - 为什么结构体的 sizeof 不等于每个成员的 sizeof 之和?

c - 当递增 16 时,unsigned char 从 f0 变为 00

html - 如何避免在 C 中使用系统命令打印 'echo' 输出