【发布时间】:2013-04-07 19:02:34
【问题描述】:
我正在寻找一种在 C 中不使用 sizeof 来查找数组大小的方法,我发现了以下代码:
int main ()
{
int arr[100];
printf ("%d\n", (&arr)[1] - arr);
return 0;
}
谁能给我解释一下它是如何工作的?
【问题讨论】:
-
没有理由不能使用
sizeof。 -
看起来这个有 100 个元素的数组实际上被视为一个(未命名的)数组的第 0 项。
-
不错的技巧,它也符合标准。
-
@effeffe:也许吧,但请看下面 Daniel 的 cmets。我认为它不符合标准,尽管我想不出一个很好的理由让它在实践中不起作用。减法,我的意思是——
%d的使用肯定不是严格遵守的,事实上在一个看起来相当正常的大端实现中会失败,一个 32 位int和一个 64 位ptrdiff_t。跨度> -
@SteveJessop 实际上你是对的,它可能不符合标准,让我们在那里进行讨论。但是,我同意它应该可以工作,但标准不能让我们取消引用实际上并不指向对象或其一部分的指针,这是有道理的。