什么类型的输入值在C中使用sizeof函数?

oru*_*pov 1 c types sizeof

我对sizeofC中的函数有疑问.我想编写一些函数来获取给定类型的位大小.我是一个新手,对C的经验很少,所以我想知道我是否想要一个以下结构应该是我的输入类型?

int bits(  /*what TYPE goes here?*/ input  ) {
    return (8*sizeof( input ));
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我的输入直接传递给sizeof,那么我应该将哪种类型传递给我的函数原型以使其正常工作?

Jen*_*ens 5

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标准也讨论了填充位,这可能会使问题进一步复杂化,但我从来没有在野外看到过.

  • 我正在使用`%zu`,因为这是`size_t`的(C99)格式,即`sizeof`产生的类型.使用`%lu`表示`unsigned long`. (2认同)