不用sizeof()函数求当前主机上的一个int占用几个字节

本文介绍了一种使用宏定义和模板方法来自定义实现sizeof功能的技术。宏定义方式利用指针差来计算变量的大小,而模板方法则通过泛型编程技巧实现了对数组长度的获取。这两种方法为理解C/C++底层内存管理和类型操作提供了实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值