|
Программирование >> Инициализация объектов класса, структура
int main () { int ival, jval; ival = jval = 0; правильно: присваивание 0 обеим переменн позволяют тип1 операндов. Например: ... Обеим переменным ival и jval присваивается значение 0. Следующий пример неправилен, потому что типы pval и ival различны, и неявное преобразование типов int main () { int ival; int *pval; ival = pval = 0; ошибка: разные типы невозможно. Отметим, что 0 является допустимым значением для обеих переменных: ... Верен или нет приведенный ниже пример, мы сказать не можем, , поскольку определение int main() { int ival = jval = 0; верно или нет? jval в нем отсутствует: Это правильно только в том случае, если переменная jval определена в программе ранее и имеет тип, приводимый к int. Обратите внимание: в этом случае мы присваиваем 0 значение jval и инициализируем ival. Для того чтобы инициализировать нулем обе int main() { правильно: определение и инициализация int ival = 0, jval = 0; ... переменные, мы должны написать: В практике программирования часты случаи, когда к объекту применяется некоторая операция, а результат этой операции присваивается тому же объекту. Например: и его результат, true или false, присваивается переменной ch. (Приоритеты операций будут рассмотрен! в разделе 4.13.) Аналогично несколько операций присваивания могут быть объединены, если это int arraySum( int ia[], int sz ) int sum = 0; for ( int i = 0; i < sz; ++i ) sum = sum + ia[ i ]; return sum; Для более компактной записи С и С++ предоставляют составные операции присваивания. С использованием такого оператора данный пример можно переписать следующим int arraySum( int ia[], int sz ) { int sum = 0; for ( int i =0; i < sz; ++i ) эквивалентно: sum = sum + ia[ i ]; sum += ia[ i ]; return sum; образом: Общий синтаксис составного оператора присваивания таков: a op= b; где op= является одним из десяти операторов: Запись a op= b в точности эквивалентна записи a = a op b. Упражнение 4.6 int main() { float fval; int ival; int *pi; fval = ival = pi = 0; Найдите ошибку в данном примере. Исправьте запись. Упражнение 4.7 Следующие выражения синтаксически правильны, однако скорее всего работают не так, как предполагал программист. Почему? Как их изменить? if ( ptr = retrieve pointer() != 0 ) (b) if ( ival = 1024 (c) ival += ival + 1; 4.5. Операции инкремента и декремента Операции инкремента (++) и декремента (-- ) дают возможность компактной и удобной записи для изменения значения переменной на единицу. Чаще всего они используются при работе с массивами и коллекциями - для изменения величины индекса, указателя #include <vector> #include <cassert> int main() int ia[10] = {0,1,2,3,4,5,6,7,8,9}; vector<int> ivec( 10 ); int ix vec = 0, ix ia = 9; while T ix vec < 10 ) ivec[ ix vec++ ] = ia[ ix ia- ]; int *pia = sia[9]; vector<int>::iterator iter = ivec.begin(); while ( iter != ivec.end() ) assert( *iter++ == *pia- ); или итератора: Выражение ix vec++ является постфиксной формой оператора инкремента. Значение переменной ix vec увеличивается после того, как ее текущее значение употреблено в качестве индекса. Например, на первой итерации цикла значение ix vec равно 0. Именно это значение применяется как индекс массива ivec, после чего ix vec увеличивается и становится равным 1, однако новое значение используется только на следующей итерации. Постфиксная форма операции декремента работает точно так же: текущее значение ix ia берется в качестве индекса для ia, затем ix ia уменьшается на 1. Существует и префиксная форма этих операторов. При использовании такой форм: текущее значение сначала уменьшается или увеличивается, а затем используется новое неверно: ошибки с границами индексов в обоих случаях int ix vec = 0, ix ia = 9; while ( ix vec < 10 ) значение. Если мы пишем:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |