注册 登录
编程论坛 C++教室

sizeof获取数组长度的问题

a12429971 发布于 2018-06-05 18:10, 1401 次点击
发现好像在函数模板中使用sizeof和在main函数中使用sizeof会得出不一样的值
本人初学者,对这个情况是在理解不透,望各位前辈赐教

template <class T>
T arrlen(T array[])
{
    int length =(sizeof(array) / sizeof(array[0]));
    cout << length << endl;
}
先是写了一个函数模板

但在main函数中
int Int[] = {1,4,5,7,2,1,3,9,34}; //有9个元素的整型数组
int length = sizeof(Int) / sizeof(Int[0]);
此时 length = 9

而我在main函数中套用了arrlen函数时

arrlen(Int);

输出却是2

恳请各位前辈帮助
3 回复
#2
rjsp2018-06-05 21:20
array的类型是T*,是个指针,不是数组。
如果是数组,怎么传参?原生数组可没有拷贝构造和赋值操作。

程序代码:
template <class T, size_t N>
T arrlen( T (&array)[N] )
{
    size_t length = (sizeof(array) / sizeof(array[0]));
    cout << length << endl;
}

参见 http://en.
#3
a124299712018-06-05 22:34
回复 2楼 rjsp
谢谢前辈!现在在自学C++,弄懂了sizeof值不一的原因了,但不太明白template后面的size_t N是什么意思,还需要再研究
1