如何计算数组初始化的个数

hsf1002 2009-12-10 08:53:50
比如 Type arr[6] = {value_0, value_1};
它初始化的个数是2;有什么通用简单的方法知道呢?
...全文
210 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuesheng3707 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 nk_ysg 的回复:]
sizeof
[/Quote]

不可以
hsf1002 2009-12-10
  • 打赏
  • 举报
回复
我就想在编译的时候就可检测到问题
hsf1002 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 forster 的回复:]
没初始化不一定为0
[/Quote]全局的是 0 吧;
hsf1002 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 mstlq 的回复:]
全局……
只好循环,判断找“0”了……
万一人家也是初始化为0的,那就悲剧了……
[/Quote]可以确定这个0不会影响到的,比如数组类型是指针,非法值是PNULL(是0),类型是TXT_ID, 非法值是TXT_NULL(非0);
forster 2009-12-10
  • 打赏
  • 举报
回复
没初始化不一定为0
hsf1002 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 jasion_chen 的回复:]
不知道是基于何种设计的需求要这样做
[/Quote]---------------------------------------
例如:
const static HandleIconFun s_mainmenu_multi_page_func[PAGE_NUM][ICON_NUM] =
{
// first page
{
EnterPB,
EnterSms,
EnterBT,
//
},
// second page
{
EnterCL,
EnterMp3,
//
},
//
//
...
};

const static TXT_ID s_mainmenu_multi_page_text_id[PAGE_NUM][ICON_NUM] =
{
// first page
{
TXT_PB,
TXT_Sms,
TXT_BT,
//
},
// second page
{
TXT_CL,
TXT_Mp3,
//
},
//
//
...
};
为了让上述2个数组每一维数的实际初始化个数一致;这样在编译的时候就可检测到问题,而不至于运行时出现错误;
jasion_chen 2009-12-10
  • 打赏
  • 举报
回复
不知道是基于何种设计的需求要这样做
lovesi3344 2009-12-10
  • 打赏
  • 举报
回复
Type arr[] = {value_0, value_1};
方括号留空,让编译器为你代劳


[Quote=引用楼主 hsf1002 的回复:]
比如 Type arr[6] = {value_0, value_1};
它初始化的个数是2;有什么通用简单的方法知道呢?
[/Quote]
alijun19886666 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 asdnana 的回复:]
sizeof(arr)/sizeof(arr[0])
[/Quote]

这样计算的是这个数组总共开辟的维数
alijun19886666 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 hsf1002 的回复:]
比如 Type arr[6] = {value_0, value_1};
它初始化的个数是2;有什么通用简单的方法知道呢?
[/Quote]

这本身就有矛盾,这样初始化就是默认为数组Type arr后四个变量为0,建议如果这个数组后续要增加维数可以采用动态开放,new和delete,链表操作
  • 打赏
  • 举报
回复
[Quote=引用楼主 hsf1002 的回复:]
比如 Type arr[6] = {value_0, value_1};
它初始化的个数是2;有什么通用简单的方法知道呢?
[/Quote]

这个只能你自己维护信息了,没道理C++可以聪明到这种地步。
a1330575 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hsf1002 的回复:]
引用 3 楼 sxsong_04 的回复:
用循环吧,找非默认值的个数
在做项目的时候就是用循环,但是我觉得这样不好,如果数组类型改变就得重写;
[/Quote]
再把数组对应的数组默认值传进去不就行了啊
z569362161 2009-12-10
  • 打赏
  • 举报
回复
最好是用什么自己先知道
苍蝇①号 2009-12-10
  • 打赏
  • 举报
回复
无解。
可能你需要的是一个线性表
LPR_Pro 2009-12-10
  • 打赏
  • 举报
回复
无解
im_ym 2009-12-10
  • 打赏
  • 举报
回复
这个只能定些默认的规则了,根据规则判断初始化的个数~~~
mstlq 2009-12-10
  • 打赏
  • 举报
回复
全局……
只好循环,判断找“0”了……
万一人家也是初始化为0的,那就悲剧了……
neu_gis 2009-12-10
  • 打赏
  • 举报
回复
规范一点的话,应该是全部初始化
hsf1002 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 donntknow 的回复:]
1,一般编码规范都会要求,对数组要在声明时全部初始化。
2,c中,未初始化的数组里面存的是什么值无法知道,因此没有什么方法可以判断哪些初始化了,哪些没有初始化。
[/Quote]呵呵,有道理,我很确定只有定义全局数组时才有这个知道数组初始化个数的需求,所以未初始化的值是确定的了;
hsf1002 2009-12-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 asdnana 的回复:]
sizeof(arr)/sizeof(arr[0])
[/Quote]这个肯定不对啦;
加载更多回复(10)

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧