C++ 实现计算数组大小的函数,对函数参数的正确使用的认识

数组的大小计算,不就是一个sizeof吗?

#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
    int a[]{1,2,3,4,5,6,7,8,9,0};            
    cout << sizeof(a)/sizeof(int) << endl;
}

结果正确。写成函数,应当没有问题吧。

int lenOfArray(int a[])
{
    return sizeof(a)/sizeof(int);    
}

结果必须不正确。因为数组名作参数,传过去的是 指针变量,编译器支提示我们 它sizeof(a)是指 sizeof(int*)。

指针不行,引用行吧。

int lenOfArray(int (&a)[])
{
    return sizeof(a)/sizeof(int);    
}

不能调用。因为sizeof函数反馈引用a定义不确定。a可以用来引用各种大小的对象。

有什么办法呢?

模板出来了。

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

结果正确。 这个T在应用的时候,确定为引用对象的正确形式。

模板真是强大的。

还有更强大方便的。

template<typename T, int N>
int lenOfArray(T(&arr)[N])
{
    return N;
}

结果正确,不用计算的。直接利用的模板填写时的成果。

这一历程告诉我们,要正确的判断 参数的性质利用模板的填写机制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值