Я нашел что-то подобное в google:
for(int i=0;someString[i];++i){
//code to do
}
но я не могу понять, что означает someString [i]. Он не должен быть логическим выражением, так как компилятор знает, когда закончить цикл? Возможно, это тривиальный вопрос, но я довольно новичок в c++.
Благодарю вас в прямом эфире
Если someString
- это массив, содержащий все, что может быть преобразовано в bool
, то доступ к его элементам служит условием. Например, если это массив char
, то все элементы bar '\0'
будут оцениваться как true
. Например:
#include <iostream>
int main()
{
char someString[] = {'h', 'e', 'l', 'l', 'o', '\0'};
std::cout << std::boolalpha;
for (auto c : someString)
std::cout << bool(c) << std::endl;
}
Ваша петля остановится, столкнувшись с первым элементом фальшивки.
Предполагая, что someString
является char*
или const char*
, этот цикл прекращается, когда он достигает завершающего байта NUL.
Это потому, что каждый char
называемый someString[i]
является числом, а числа преобразуются в false
тогда и только тогда, когда они равны 0. NUL равно 0.
someString
? Мы не сможем ответить, если вы не скажете (или не угадаете), как!\0
всегда равно нулю, если используется ASCII или любой другой код. www-ee.eng.hawaii.edu/~tep/EE160/Book/chap7/...