1)宏定义实现:
#define MySizeof(Value) (char*)(&Value + 1) - (char*)&Value
(char*)&Value返回Value的地址的第一个字节, (char*)(&Value + 1)返回的是Value的地址的下一个地址的第一个字节
#include <iostream>
using namespace std;
#define my_sizeof(L_Value) (char* )(&L_Value + 1) - (char* )&L_Value
int main()
{
int i;
double f;
double a[4];
double* q;
cout<<my_sizeof(i)<<endl;
cout<<my_sizeof(f)<<endl;
cout<<my_sizeof(a)<<endl;
cout<<my_sizeof(q)<<endl;
cout<<my_sizeof("aadf")<<endl;
return 0;
}
2 )
#include <iostream>
using namespace std;
template <class Any>
int LengofArray(Any* p)
{
return int(p+1) - int(p);
}
int main()
{
int* i;
double* q;
char a[10];
cout<<LengofArray(i)<<endl;
cout<<LengofArray(q)<<endl;
cout<<LengofArray(&a)<<endl;
return 0;
}