问题描述
- 有关获取数组长度sizeof(array) / sizeof(array[0])的问题
-
下面就是一个简单程序,请问为什么在ranking函数中调用getArrayLen()时输出的N值不是7,而是1?
#include
using namespace std;
template
int getArrayLen(T& array) //使用模板定义一个函数getArrayLen,该函数将返回数组array的长度
{
return (sizeof(array) / sizeof(array[0]));
}void ranking(int a[], int b[]){
int N = getArrayLen(a);
cout << N;
}
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7 },b[7];
ranking(a, b);
return 0;
1. }
解决方案
sizeof对于数组类型来说,返回的不是数组的长度,而是数组首元素的长度。
事实上,没办法知道一个数组的长度,否则字符数组用不着浪费一个单元用作为结束标志了。
解决方案二:
这是因为你作为参数传递的数组,sizeof并不会去求数组的整个长度,而是指针长度4。而如果你放到函数里面就可以。
时间: 2024-11-08 18:56:08