C++数组长度求解

代码张 2016-10-09 04:29:31
下面a[len]应该是越界了,如何判断各种数据类型数组的结束标志,可以使用sizeof(数组)/sizeof(数据类型),但在传递数组参数时,该如何使用,因为传参时传进去的实际上是地址而非数组值,谢谢。
#include <iostream>
using namespace std;
template<typename T>
int Tlength(T a)
{
int len = 0;
while (a[len])
{
len++;
}
return len;
}
void main()
{
int a[] = { 1,2,4 };
int s = Tlength(a);
cout << s << endl;
cin.ignore();
}
...全文
303 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码张 2016-10-18
  • 打赏
  • 举报
回复
引用 2楼家人是最好的礼物 的回复:
1.感觉没有实际办法啊!就像c语言,传递一个数组,一定是要告诉那个函数我传递的这个数据有多大。 2.如果可以修改函数,我就 typedef struct { int [] int length; }IntArray.再从新设计那个函数。
template<typename T, size_t n>
int Tlength(T (&a)[n])
{
    int a.len = 0;
    while (a.len < n)
    {
        len++;
    }
    return len;
}
3.或者添加一个长度参数 4.如果不能修改函数。我会设计一个类 IntArrary不过需要重载[],=,++运算符。 5.虽然c++建立在c之上,并大于c. 但是内部的指针是跨越不了的。
谢谢,已搞定,采用的你的方法,忘了回复了,不过要自己去循环得到长度,是不靠谱的,C语言里没有越界判定
xskxzr 2016-10-09
  • 打赏
  • 举报
回复
引用 1 楼 fefe82 的回复:
template<typename T>
int Tlength(T a, size_t length)
{
    int len = 0;
    while (len < length)
    {
        len++;
    }
    return len;
}
template<typename T, size_t n>
int Tlength(T (&a)[n])
{
    int len = 0;
    while (len < n)
    {
        len++;
    }
    return len;
}
直接返回length/n不就行了……
HymanLiuTS 2016-10-09
  • 打赏
  • 举报
回复
要么增加个参数把数组的大小传过去,要么改成传数组的引用类似char (&buf)[n]
paschen 版主 2016-10-09
  • 打赏
  • 举报
回复
数组秦为参数传递时,会退化为指针,再用sizeof得到的只是指针的大小 你需要在函数参数传递的时增加一个数组大小的参数 或者传入数组的引用,函数中可以用sizeof获取数组大小
赵4老师 2016-10-09
  • 打赏
  • 举报
回复
请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢?
dustpg 2016-10-09
  • 打赏
  • 举报
回复
用标准库的话, 可以用
std::end(xxx) - std::begin(xxx)
  • 打赏
  • 举报
回复
1.感觉没有实际办法啊!就像c语言,传递一个数组,一定是要告诉那个函数我传递的这个数据有多大。 2.如果可以修改函数,我就 typedef struct { int [] int length; }IntArray.再从新设计那个函数。
template<typename T, size_t n>
int Tlength(T (&a)[n])
{
    int a.len = 0;
    while (a.len < n)
    {
        len++;
    }
    return len;
}
3.或者添加一个长度参数 4.如果不能修改函数。我会设计一个类 IntArrary不过需要重载[],=,++运算符。 5.虽然c++建立在c之上,并大于c. 但是内部的指针是跨越不了的。
fefe82 2016-10-09
  • 打赏
  • 举报
回复
template<typename T>
int Tlength(T a, size_t length)
{
    int len = 0;
    while (len < length)
    {
        len++;
    }
    return len;
}
template<typename T, size_t n>
int Tlength(T (&a)[n])
{
    int len = 0;
    while (len < n)
    {
        len++;
    }
    return len;
}

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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