这是在C采访中提出的问题我想知道这个
的正确逻辑是什么如果您在C中没有sizeof运算符,您将如何了解 int的大小?
答案 0 :(得分:10)
使用数组[*]:
int a[2];
int sizeof_int = (char*)(a+1) - (char*)(a);
实际上,由于有关指针算术的部分中的注释,您甚至不需要数组,因为出于指针算术的目的,对象的行为类似于大小为1的数组,以及一个非正式的指针对于数组来说是合法的:
int a;
int sizeof_int = (char*)((&a)+1) - (char*)(&a);
[*]我的意思是“解决问题的方法是使用数组”。实际上不使用数组,请使用sizeof
!
答案 1 :(得分:0)
一种方法是计算两个连续int变量之间的地址差异。
答案 2 :(得分:0)
我想到两种方式。一种是打印'-1'作为无符号值,并根据打印的数字推断出尺寸。其次是:
#include <stdio.h>
int size()
{
int a = 1;
int size = 1;
while(a<<=1)
size++;
return size;
}
int main(int argc, char** argv)
{
printf("Size of int: %d\n", size());
return 0;
}
答案 3 :(得分:0)
声明int,将其初始化为-1。重复'&lt;&lt;&lt; 1'直到它为0.需要的移位数=以位为单位的大小。 '&lt;&lt;&lt; 3&gt;以大小为单位。
RGDS, 马丁