为什么要使用sizeof(element)而不是sizeof(TYPE)来计算数组中的元素数?


15

我正在阅读“ KN的C编程王”,发现以下语句:

我们讨论了使用表达式sizeof(a)/sizeof(a[0])来计算数组中元素的数量。表达式sizeof(a)/sizeof(t)(其中t是a的元素的类型)也可以使用,但是被认为是劣等技术。

为什么它被认为是劣等技术?


8
您是否考虑过程序员更改a中元素的类型会发生什么?大小不同于t的类型。第一表达仍然是好的,而第二将打破

1
@gnat:您应该做出答案。
马丁·约克

Answers:


26

sizeof(a)/sizeof(t)将类型明确地编码到表达式中。现在,您已经在多个位置指定了类型,并且没有编译器支持来确保您使用的是同一类型。因此,如果您更改数组的基本类型,但不更改(完全独立的)count表达式,则使用bingo:您的代码可以很好地编译,但是元素计数将是错误的。如果幸运的话,您的程序将崩溃,但如果无法运行,它将几乎完全正确地运行,但是偶尔也会表现得异常奇怪。

sizeof(a)/sizeof(a[0])保证是正确的,只需要数组的名称。更改类型,您就可以了;更改数组名称,编译器将抱怨。无需思考:我们喜欢这种编程。


好吧,我确实更喜欢sizeof a/sizeof*a,即使这并不是真正的差异。
Deduplicator 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.