С++ для начинающих




Операции присваивания - часть 2


*(pia + 2) = 1; // правильно

Операция присваивания имеет результат – значение, которое было присвоено самому левому операнду. Например, результатом такой операции

ival = 0;

является 0, а результат

ival = 3.14159;

равен 3. Тип результата – int в обоих случаях. Это свойство операции присваивания можно использовать в подвыражениях. Например, следующий цикл

extern char next_char();

int main()

{

    char ch = next_char();

    while ( ch != '\n' ) {

        // сделать что-то ...

        ch = next_char();

    }

    // ...

}

может быть переписан так:

extern char next_char();

int main()

{

    char ch;

    while (( ch = next_char() ) != '\n' ) {

        // сделать что-то ...

    }

    // ...

}

Заметим, что вокруг выражения присваивания необходимы скобки, поскольку приоритет этой операции ниже, чем операции сравнения. Без скобок первым выполняется  сравнение:

next_char() != '\n'

и его результат, true или false, присваивается переменной ch. (Приоритеты операций будут рассмотрены в разделе 4.13.)

Аналогично несколько операций присваивания могут быть объединены, если это позволяют типы операндов. Например:

int main ()

{

    int ival, jval;

    ival = jval = 0; // правильно: присваивание 0 обеим переменным

    // ...

}

Обеим переменным ival и jval присваивается значение 0. Следующий пример неправилен, потому что типы pval и ival различны, и неявное преобразование типов невозможно. Отметим, что 0 является допустимым значением для обеих переменных:

int main ()

{

    int ival; int *pval;

    ival = pval = 0; // ошибка: разные типы

    // ...

}

Верен или нет приведенный ниже пример, мы сказать не можем, , поскольку определение jval в нем отсутствует:

int main()

{

    // ...

    int ival = jval = 0; // верно или нет?

    // ...

}

Это правильно только в том случае, если переменная jval определена в программе ранее и имеет тип, приводимый к int. Обратите внимание: в этом случае мы присваиваем 0 значение jval и инициализируем ival. Для того чтобы инициализировать нулем обе переменные, мы должны написать:




Содержание  Назад  Вперед