一、思路
不使用sizeof运算符,还需要得到某个int类型变量所占字节数,肯定会牵扯到地址运算,也就是会用到指针。对于int型指针p,p+1,相当于前进了int所占字节大小个字节,对于char类型指针q,q+1,相当于前进了1个字节。如果我们将指向int型数组a[4]的指针pointer+1,那么pointer会指向下一个int型数据a[1],利用两个地址之差就可以得到int型数据所占字节数。前提是我们知道char类型所占字节数为1。
二、实现
#include <stdio.h>
#define MySizeof(value) (char *)(&value+1)-(char*)&value
int main(int argc, char *argv[])
{
int i ;
double f;
double a[4];
double *q;
printf("%d\r\n",MySizeof(i));// 4
printf("%d\r\n",MySizeof(f));// 8
printf("%d\r\n",MySizeof(a));// 32
printf("%d\r\n",MySizeof(q));// 4
// 你可能对上面的32有疑惑
// a是数组首地址
// &a是数组首元素的地址.
// a+1:就是数组首地址加上一个元素所占的地址大小,这里int是4个字节,所以加上1x4.
// &a+1:代表的是加上整个数组的大小,这里数组尺寸是3,所以+1代表的是地址加上3x4.
return 0;
}