你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

有一个关于数组元素个数的问题

[复制链接]
黑皮男 提问时间:2015-6-29 09:05 /
在一个.c文件中定义一个数组,然后在其他文件中引用,用sizeof求数组长度,那么按说是必须要声明这个数组,并且应该指明数组的大小,但是是不是声明了,这部分代码又被封装起来了,无法查看,如果在定义的时候没有指定数组的大小,只是做了初始化,而且这个初始化可以看到,而且自己可以定义初始化的值,并且初始化不同元素个数也可以,那么在其他文件求该数组长度可以办到吗,比如下面中在一个.c文件中定义一个数组:unsigned char const keys[]=
{
   key1,
   key2,
   key3,
   key4,
   key5
};
数组中的元素是已定义的宏,在另一个文件中求数组大长度

arrlen = sizeof(keys) / sizeof(keys[0]);
这个有没有什么办法可以办到
收藏 评论12 发布时间:2015-6-29 09:05

举报

12个回答
stary666 回答时间:2015-6-29 09:41:12
type是什么?????
qianfan 回答时间:2015-6-29 09:54:36
在其他文件中
extern unsigned char const keys[];
黑皮男 回答时间:2015-6-29 10:15:52
QianFan 发表于 2015-6-29 09:54
在其他文件中
extern unsigned char const keys[];

这个不行吧,在其他文件声明的时候应该带上元素个数吧
qianfan 回答时间:2015-6-29 10:16:11
黑皮男 发表于 2015-6-29 10:15
这个不行吧,在其他文件声明的时候应该带上元素个数吧

extern不需要
黑皮男 回答时间:2015-6-30 19:10:37
stary666 发表于 2015-6-29 09:41
type是什么?????

什么type
54chenjq 回答时间:2015-6-30 21:17:20
extern 妙极了
759611 回答时间:2015-6-30 21:34:45
extern ……
759611 回答时间:2015-6-30 21:35:02
extern ……
moyanming2013 回答时间:2015-6-30 21:52:18
本帖最后由 moyanming2013 于 2015-6-30 21:59 编辑

别的文件中无法引用这个keys变量,因为没有include。会出现编译错误。
QianFan版主说的很对,需要在头文件中使用extern声明。但长度如何获知呢?
想必可以如下:
/*abc.h*/
typedef enum{
    key1=0x01;
    key2=0x72;
    maxKey=2
};
extern unsinged char const keys[maxKey];

/*abc.c*/
#include "abc.h"
unsigned char const keys[maxKey] = {key1,key2};

扩充按键时,只需要在enum中添加key并使maxKey增加,并更新keys的定义即可,不用管keys的长度,因为这个长度在编译时已确定:maxKey,keys和maxKey在abc.h引用的任何地方都可以直接使用。sizeof等库函数不太建议经常使用,逼不得已再用,一是sizeof等(由其strlen)开销大(时间和空间都大);二是用了maxKey可以直接知道数组的大小。
黑皮男 回答时间:2015-7-6 09:05:50
我明白了,没有看到后面还有个变量保存数组大小
废鱼 回答时间:2015-7-6 09:13:44
楼主定义的是unsigned char型的常量,理论是用sizeof(keys) 就可以了。因为每个占用一个字节。
黑皮男 回答时间:2015-7-6 17:29:00
安 发表于 2015-7-6 09:13
楼主定义的是unsigned char型的常量,理论是用sizeof(keys) 就可以了。因为每个占用一个字节。 ...

这个我知道,多谢

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版