当在原始数组上调用sizeof而不是函数的参数时,我注意到两种不同的行为,并在一个函数的参数上调用它。
示例:
我有六个整数的数组(在我的代码库中,它远不止于此)。我正在尝试编写将这些内容放在std::vector<std::pair<std::pair<int, int>, int> >
中的函数,这意味着在构造向量之前,函数必须检查它给出的数组的大小是否为3的倍数。我在声明int数组后立即测试sizeof a / sizeof a[0]
,并且它正确地返回6.但是,当我这样做时:
#include <iostream>
using namespace std;
void doSomething(const int* a)
{
cout << sizeof a / sizeof a[0] << endl;
// do some real work down here
}
int main()
{
int a[] = {40,30,60,38,609,780};
doSomething(a);
}
不返回6.为什么会发生这种情况?这种意外行为的最快和最肮脏的方法是什么?