C语言中用函数实现整型数据位宽,如16,32位,不可以使用sizeof

在判断int位宽的时候,一般使用sizeof(int)实现,现在讨论一下,不用sizeof()来实现整数位宽。

基本思想:可以利用地址之间的差值来确定整数位宽,代码实现为:

#include
void main(){
int a[2];
int b;
b=(int(&a[1])-int(&a[0]))*8;
printf("%d\t",b);
}

会存在这样的错误:b=(&a[1]-&a[0])*8;这个时候的值运行为8,而上面程序值为32,两个的区别为:

b=&a[1]-&a[0]=a+1-a=1是差值,是没有物理意义的

b=(int)&a[1]-(int)&a[0]两个地址的值是int类型的字节数,是有物理意义的。

你可能感兴趣的:(C语言中用函数实现整型数据位宽,如16,32位,不可以使用sizeof)