我对sizeofC中的函数有疑问.我想编写一些函数来获取给定类型的位大小.我是一个新手,对C的经验很少,所以我想知道我是否想要一个以下结构应该是我的输入类型?
int bits( /*what TYPE goes here?*/ input ) {
return (8*sizeof( input ));
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我的输入直接传递给sizeof,那么我应该将哪种类型传递给我的函数原型以使其正常工作?
C是静态类型的,因此您无法将类型传递给函数.用函数无法做到这一点.但是当你使用类似函数的宏时它会起作用:
#define bits(type) (8*sizeof(type))
printf ("The type 'int' is %zu bits wide\n", bits(int));
Run Code Online (Sandbox Code Playgroud)
术语挑选:sizeof不是一个功能; 它是一个运营商.当参数是表达式时,您可以在没有括号的情况下使用它,如
int i;
size_t j = sizeof i;
Run Code Online (Sandbox Code Playgroud)
另请注意,乘以8是一个可能错误的假设.对于你最近可以购买的任何东西来说,这是一个安全的赌注,但当记忆以千字节(= 1024 :-)来衡量时,有一些奇怪的野兽,那是不正确的.C标准也讨论了填充位,这可能会使问题进一步复杂化,但我从来没有在野外看到过.