当我们不知道数组的大小时,我们如何迭代整数数组?

时间:2017-02-28 09:18:49

标签: c arrays loops

This is a code from geeksforgeeks计算排序实施:

已经使用下面的for循环迭代字符串 -

char arr[] = "geeksforgeeks";

for(i = 0; arr[i]; ++i)
   ++count[arr[i]];

从谷歌搜索我可以理解,这种情况隐含地评估为arr[i]!='\0'。我理解正确吗? 如果我使用类似的for循环迭代整数数组,它会评估为arr[i]!=0吗?

或者当我们不知道它的大小时,有没有更好的方法来遍历整数数组。我是初学者,请尝试提供不涉及C语言高级数据结构的建议。

2 个答案:

答案 0 :(得分:3)

除非您确定数组末尾有某种 sentinel值,否则除非知道它的大小,否则不能迭代数组。

在字符串的情况下, sentinel值的示例为'\0'

当你想使用整数数组时,你应该保持数组和大小。这就是将数组作为输入参数的函数采用指针和int

的原因
void example(int* array, int size) { /* ... */ }

答案 1 :(得分:3)

是的,false构造将for视为整数表达式,其结果为'\0'

由于字符串由值{0的NULL字符终止,因此可以检测字符串的结尾。

是的,您可以使用它来迭代任何整数(或指针,其中false被认为是{{1}})数组的数组,但当然终止这样的数组为零则不太常见(因为零是一个相当有用的整数。)

如果您可以使用其他值来标记结尾(这称为a "sentinel"),您当然可以使用它,而不是长度或零。没有什么神奇的零,除了对于字符串它是惯例,因此得到很好的支持。