[C_C++语言]_0_0_动态计算结构体数组长度

本文介绍了一种使用C语言实现的简单菜单功能选择方法。通过定义结构体S_MenuFun来关联菜单项ID与对应的函数指针,实现了根据用户输入的ID调用不同函数的功能。此方法便于扩展和维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <string.h>

typedef struct S_MenuFun
{
    int id;
    void (*fun)();
}S_MenuFun;

void fun1()
{
	printf("fun1\n");
}

void fun2()
{
	printf("fun2\n");
}

void fun3()
{
	printf("fun3\n");
}



S_MenuFun menuFun[] = 
{
	0,fun1,
	1,fun2,
	2,fun3,
};
int main()
{
	printf("%ld\n", sizeof(menuFun)/sizeof(menuFun[0]));
	
	return 0;
}

 
结构体数组变量名.结构体数组长度这个表述可能存在一些误导或者语法错误,让我们先澄清一下: ### 结构体数组 假设我们有一个简单的结构体定义以及基于它的数组声明,在 C 语言中可能是这样的形式: ```c struct Example { int id; char name[50]; }; // 定义了一个包含三个元素的Example类型的结构体数组 struct Example examplesArray[3]; ``` 在这个例子中,`examplesArray`就是“结构体数组”的变量名称。 但是,“结构体数组变量名.结构体数组长度”这种写法并不是合法的标准C/C++代码表达。如果你想要获取一个已知大小(即编译时常量确定了大小)的普通一维数组(包括结构体型)的元素个数,可以这样做: #### 对于全局或静态分配的一维数组 (例如上面的例子): ```c int length = sizeof(examplesArray)/sizeof(struct Example); ``` 这里 `length` 将会等于 `3`. 而如果你想动态地创建并管理一个结构体数组,并且需要跟踪其实际占用的有效项数目,则通常会在程序设计上另外维护一个计数器来记录有效条目的数量,因为对于通过指针操作的新式内存分配来说(`malloc`, `new`)是没有内置机制能够直接查询到当前存储了多少个对象实例的. 综上所述,"结构体数组变量名"代表的是整个数据集合的名字;至于说"结构体数组长度",如果是指物理空间里能存放多少个元素的话,可以用上述提到的方式计算得到,但这不是一种标准的语言特性而是程序员利用特定规则推导出来的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值