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; }
时间: 2024-10-11 05:16:06