hdqqq

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  35 随笔 :: 0 文章 :: 104 评论 :: 0 Trackbacks

在有些时候,需要对预设的数组进行循环操作

char char_array[] = {'a','b','c','d'};
int i;
for (i = 0; i < sizeof(char_array)/sizeof(char); i++) {
    cout << char_array[i] << endl;
}

所以写了个宏,取得数组的大小

template <typename T>
T get_size(T value[]);

#define ASIZEOF(a) sizeof(a)/sizeof(get_size(a))

然后就可以这样写了.
for (i = 0; i < ASIZEOF(char_array); i++) {
    cout << char_array[i] << endl;
}

但是缺点就是不能正确的分别传入的是一个指针类型,还是一个类型的数组.


代码在vc6 和 devcpp 4.9 中测试通过


 

posted on 2006-08-24 13:35 hdqqq 阅读(718) 评论(4)  编辑 收藏 引用 所属分类: c/c++

评论

# re: 数组取大小 2006-08-24 14:58 周星星
因为 sizeof(元素类型) 和 sizeof(元素) 是一样的,所以
template <typename T> T get_size(T value[]);
#define ASIZEOF(a) sizeof(a)/sizeof(get_size(a))
可以直接改为
#define ASIZEOF(a) sizeof(a)/sizeof(a[0])

你看看标准库中是怎么写的吧 stdlib.h
#if !defined(_countof)
#if !defined(__cplusplus)
#define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
#else
extern "C++"
{
template <typename _CountofType, size_t _SizeOfArray>
char (*__countof_helper(_CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
#define _countof(_Array) sizeof(*__countof_helper(_Array))
}
#endif
#endif
  回复  更多评论
  

# re: 数组取大小 2006-08-24 23:24 hdqqq_
有道理,我光想着把类型取出来,钻牛角尖了.  回复  更多评论
  

# re: 数组取大小[未登录] 2007-04-29 09:26
那二维数组,或多维数组那?  回复  更多评论
  

# re: 数组取大小[未登录] 2007-06-15 11:42 hdqqq
这个倒是没考虑过.  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理