Программирование >>  Инициализация объектов класса, структура 

1 ... 46 47 48 [ 49 ] 50 51 52 ... 395


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 )

значение. Если мы пишем:



1 ... 46 47 48 [ 49 ] 50 51 52 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика