这几乎是我在标题中的问题.对于其他任何使用它似乎完全不自然.
在研究这个时,我发现有基础10的硬件支持的历史例子,以及IBM POWER6和系统z9的更现代的例子.即使在这些情况下,我也不知道FLT_RADIX在任何主流C编译器中是否会出现10.
我特别关注的是,我正在编写一个只能在通用计算机上运行的应用程序的代码,而且我想知道我是否可以在FLT_RADIX==2没有严重关注的情况下静态断言,就像我目前静态断言一样!(unsigned char)256.
c11 标准规定 sizeof,
“当应用于具有数组类型的操作数时,结果是数组中的字节总数”
脚注(103)说:
“当应用于声明为数组或函数类型的参数时,sizeof 运算符会生成调整后(指针)类型的大小”。
我从中得出,当应用于数组类型时, sizeof 给出数组的大小(元素数量 x 元素大小),但应用于声明为数组类型的参数时,它给出指针的大小。
由于脚注,如何可能有一个不产生指针大小的数组类型对象?
我觉得在某些情况下,如果不知道这一点,我就无法相信操作符的大小。
谢谢。
编辑:我想我应该澄清我的担忧,如果定义了“int a[4]”,那么我从响应中看到 sizeof a==4*sizeof(int) ,但是 sizeof(a+0) 呢?看来 sizeof(a+1) 必须被评估为指针。我关心的是除了函数调用之外的数组衰减为指针的情况。