2014-12-30 4 views
-1

В цикле for вторая часть i.e после 1-й точки с запятой выполняется проверка условия (скажем, i меньше n). Если мы удалим часть условия вообще, она переходит в бесконечный цикл, но здесь она показывает ошибку времени выполнения, а также если мы просто пишем exp [] без индекса i, она дает ошибку компилятора, так что здесь exp [i] и как проверка состояния?Проверка состояния inFor loop

int infixToPostfix(char* exp) 
{ 
int i,k; 
for (i = 0, k = -1; exp[i]; ++i) 
.... 
.... 
} 
int main() 
{ 
char exp[] = "a+b*(c^d-e)^(f+g*h)-i"; 
infixToPostfix(exp); 
return 0; 
} 

ответ

0

не принимая во внимание отсутствие нарушения доступа, exp является char указатель, exp[i] это значение i+i го char элемента.

Далее значение из exp[i] используется для проверки состояния. т. е. 0 для false, non-zero для true.

+0

Таким образом, exp [i] оценивает либо 0, либо ненулевое значение. Под этим вы подразумеваете a, +, и все операторы и операнды не равны нулю, поэтому он запускается. В основном мы передаем exp для infixToPostfix, а символ «\ o» добавляется к нему, когда мы передаем по значению, является причина, по которой он заканчивается, когда он достигает конца? – Stack

+0

@stack правый. Значение ascii с нулевым терминатором равно 0. –

+0

Итак, в основном мы сравниваем значения ascii всех символов или, поскольку они являются символами, мы не преобразуем их в ascii, мы делаем это только для \ 0? Под этим я хочу сказать, передаю ли целое число a + b * 2 или что-то еще, тогда 2 будет преобразовано в ascii, и тогда условие будет проверено? – Stack

Смежные вопросы