通用数组长度的获取

在编写代码的时候,我们经常需要用到数组长度,如排序,逆置等操作,如果没有数组长度,代码复杂度会增加很多,也会让人感觉无从下手。

其实字符串函数是提供长度查询函数的,strlen();但是其它数组没有这个函数,所以想写一个求通用数组长度获取的函数。

一开始我是这样写的,使用C++的模板类:

template <typename T>
int ArrayLen(T src[])
{
	return (sizeof(src)) / (sizeof(src[0]));
}


但实际上这样写,无论传进去的数组长度是多少,返回的值只有1或者0;因为作为函数的形参,所有数组都会被转化为指针,实际上形参那里的数组是指针*src,因为src[0]是指第一位数据的地址。根据类型的定义以及编译环境的区别,得到的数据也有不同,以上代码在32位编译环境下,传进去的数据为int类型是,返回值为4/4=1;如果传进去的类型为double,则返回值为4/8=0;

为了避免上述情况出现,我使用别名来进行参数传递:

template <typename T>
int ArrayLen(T& src)
{
	return (sizeof(src)) / (sizeof(src[0]));
}

以上代码就是正确的。

如果是字符数组,代码就要有所变动:

template <typename T>
int ArrayLen(T& src)
{
	return (sizeof(src)) / (sizeof(src[0]))-1;
}

因为‘\0’结束符是不算入字符长度的,但它依旧占用一个数据位。

也可以用宏定义的写法:

#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值