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语言高级数据结构的建议。
答案 0 :(得分:3)
除非您确定数组末尾有某种 sentinel值,否则除非知道它的大小,否则不能迭代数组。
在字符串的情况下, sentinel值的示例为'\0'
。
当你想使用整数数组时,你应该保持数组和大小。这就是将数组作为输入参数的函数采用指针和int
:
void example(int* array, int size) { /* ... */ }
答案 1 :(得分:3)
是的,false
构造将for
视为整数表达式,其结果为'\0'
。
由于字符串由值{0的NULL
字符终止,因此可以检测字符串的结尾。
是的,您可以使用它来迭代任何整数(或指针,其中false
被认为是{{1}})数组的数组,但当然终止这样的数组为零则不太常见(因为零是一个相当有用的整数。)
如果您可以使用其他值来标记结尾(这称为a "sentinel"),您当然可以使用它,而不是长度或零。没有什么神奇的零,除了对于字符串它是惯例,因此得到很好的支持。