c - 如何找出为结构创建的数组中的元素数量?
问题描述
我创建了一个特定的结构,然后我继续以下列方式为该结构创建一个数组:
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;
}
推荐阅读
- python - 如何在 PyTorch 中标准化图像
- unity3d - 使用 Unity HDRP 进行三平面纹理
- android - Kotlin:IT 和 THIS 关键字之间的区别
- php - simple_html_dom: 简单的用例 - 取回存储在 SQLite db 中的数据
- spring-boot - 我们可以在spring boot的GET请求中传递对象吗?
- cyclomatic-complexity - 如果在计算圈复杂度时控制流图包含多个开始和/或停止节点会发生什么
- symfony - api-platform/admin 在安装后抱怨缺少 json 文件
- ckeditor5 - ckeditor5的双向支持
- python - 如何使用 Keras Lambda 层进行切片?
- python-3.x - 如何将 QScrollerProperties 应用于 QScroller,以摆脱超调?