可以使用*(&arr+1)-arr
which 计算数组长度,然后简化为(&arr)[1]-arr
which 进一步简化为1[&arr]-arr
。
但是,当在与内存分配不同的函数中计算长度时,会计算出错误的结果。
例如,
#include <iostream>
#define ARRAY_SIZE(arr) (1[&arr]-arr)
using namespace std;
void func(int *arr)
{
cout<<ARRAY_SIZE(arr)<<endl;
}
int main()
{
int arr[]={1,2,3,4,5};
cout<<ARRAY_SIZE(arr)<<endl;
func(arr);
}
这给出了输出:
5
8
是什么导致了这种奇怪的行为?