c - 应该使用什么类型来循环数组?
问题描述
让我们有这个数组:
char arr[SIZE_MAX];
我想循环遍历它(并且超过它的最后一个元素):
char *x;
for (i = 0; i <= sizeof(arr); i++)
x = &arr[i];
(编辑以添加一些带有指针的有效代码)。
最适合的类型是i
什么?
我接受非标准类型,例如 POSIX 的类型。
相关问题:
解决方案
让我们有这个数组:
char arr[SIZE_MAX];
请注意,许多 C 实现会拒绝这一点,SIZE_MAX
因为它们比它们实际支持的任何数组都大。 SIZE_MAX
是 type 的最大值size_t
,但这与对象的(依赖于实现的)最大大小不同。
我想循环遍历它(并且经过它的最后一个元素):
for (i = 0; i <= sizeof(arr); i++)
最适合 i 的类型是什么?
没有我们可以确信能够表示的可用类型,SIZE_MAX + 1
并且假设arr
确实有 size SIZE_MAX
,您需要i
's 类型能够表示该值以避免无限循环。除非您想无限循环,这是可能的,尽管不太可能。
另一方面,如果我们有
char arr[NOT_SURE_HOW_LARGE_BUT_LESS_THAN_SIZE_MAX];
那么合适的类型i
是size_t
. 这是sizeof
运算符结果的类型,如果我们唯一的假设是对象的大小小于SIZE_MAX
thensize_t
是我们可以确信的唯一类型将达到目的。
如果我们可以对对象的大小进行更严格的限制,那么选择不同的类型可能是有利的。特别是,如果我们可以确信它比UINT_MAX
then更小,那么它unsigned int
可能是一个性能略高的选择。当然,带符号的类型也可以用于i
,前提是它们实际上可以表示所有需要的值,但这可能会引起一些编译器的警告。
推荐阅读
- javascript - 访问组件的“key”道具
- sql - 在 Oracle SQL 中对行进行分组以实现唯一 ID
- java - EmbeddedKafkaRule 没有 brokerListProperty 方法
- python - 我如何从烧瓶中传递变量)o没有渲染模板的HTML?
- python - 机器学习:如何找到缺失的信息
- python - python中的字典字典
- rest - HTTP标头的“资源”和“方法”有什么区别?
- php - 正则表达式与括号不匹配
- regex - 要丢弃的正则表达式“
- python - 修复 UnboundLocalError:在 python 中赋值之前引用的局部变量“名称”