【正确答案】
【答案解析】一般求解字节数,最常采用的方法是采用sizeof求解。例如,在32位机器下,int型变量占用的内存空间大小为4个字节,而本题要求不使用sizeof,所以只能从原理上对int型变量所占的空间进行求解。
一般可以使用如下的方式实现:
#include<stdio.h>
#define MySizeof(Value)(char*)(&Value+1)-(char*)&Value
int main()
{
int i;
double f;
double a[4];
double* q;
printf("%d/n",MySizeof(i));
printf("%d/n",MySizeof(f));
printf("%d/n",MySizeof(a));
printf("%d/n",MySizeof(q));
return 0;
}
程序的输出结果:
4
8
32
4
上例中,(char*)& Value返回Value的地址的第一个字节,(char*)(&Value+1)返回 Value的地址的下一个地址的第一个字节,所以它们之差为它所占的字节数。
如果不使用宏定义的方式,也可以使用如下方式求解,程序示例代码如下:
#include<iostream>
using namespace std;
template<class Any>
int LengthofArray(Any* p)
{
return int(p+1)-int(p);
}
int main()
{
int* i;
double* q;
char a[10];
printf("%d/n",LengthofArray(i));
printf("%d/n",LengthofArray(q));
printf("%d/n",LengthofArray(&a));
return 0;
}
程序的输出结果:
4
8
10