Размещение массива в памяти



При создании массива память под все его элементы выделяется последовательно для каждого элемента в зависимости от типа массива. Для многомерных массивов в первую очередь изменяются значения самого правого индекса.

Например, для массива char aCh[2][4] будет выделено восемь байтов памяти, в которых в следующем порядке будут размещены элементы массива:

элемент aCh[0][0] aCh[0][1] aCh[0][2] aCh[0][3] aCh[1][0] aCh[1][1] aCh[1][2] aCh[1][3]
N байта                

Двухмерные массивы можно рассматривать как матрицу, в которой первый индекс определяет строку, а второй индекс - столбец. Порядок расположения элементов матрицы в памяти - по строкам.

При размещении трехмерного массива char aCh[3][2][5] память под элементы этого массива будет выделяться последовательно в соответствии со следующими значениями индексов:


Рис. 7.1.

Общий объем выделяемой под массив памяти определяется как произведение всех размерностей массива (общее число элементов), умноженное на длину типа данных массива.

Элементы массива

Доступ к элементам массива может выполняться:

по указателю на массив и индексу элемента, задаваемого в квадратных скобках: первый элемент массива имеет индекс 0;

по указателю на элемент массива.

Для получения адреса элемента массива применяется оператор &.

Имя массива является адресом массива и эквивалентно следующему выражению: &имя_массива[0].

Для определения размерности массива в байтах можно использовать функцию sizeof(имя_массива).

Например:

arrayOfInteger[0]=1;

// Присваивание значения

// первому элементу массива

iInt1=arrayOfInteger[1]=13;

// Групповое присваивание

iInt2=&arrayOfInteger[4];

// Получение адреса пятого

// элемента массива

 

21.

22. Условные конструкции выбора if/else, select.

Конструкция if используется для выполнения некоторого кода только в том случае, когда указанное условие истинно:

if (условие)
{
код для выполнения, если условие истинно
}

Вы говорите браузеру исполнять некоторый код только если указанное условие истинно.

 

Конструкцию if....else используют для выполнения некоторого кода, если условие истинно, и другого кода, если условие ложно:

if (условие)
{
код, который будет выполнен, если условие истинно
}
else
{
код, который будет выполнен, если условие ложно
}

Оператор выбора или оператор SELECT (SWITCH)

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

ВЫБОР (Критерий)

ВАРИАНТ Значение 1: Составной оператор

ВАРИАНТ Значение 2: Составной оператор

ВАРИАНТ Значение N: Составной оператор

[ИНАЧЕ: Составной оператор]

 

23. Конструкции циклов for, while, do/ while; операторы break и continue.

Оператор for - это наиболее общий способ организации цикла. Он имеет следующий формат:

for (выражение 1; выражение 2; выражение 3) тело

Выражение 1 обычно используется для установления начального значения переменных, управляющих циклом. Выражение 2 - это выражение, определяющее условие, при котором тело цикла будет выполняться. Выражение 3 определяет изменение переменных, управляющих циклом после каждого выполнения тела цикла.

Схема выполнения оператора for:

1. Вычисляется выражение 1.

2. Вычисляется выражение 2.

3. Если значения выражения 2 отлично от нуля (истина), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.

Существенно то, что проверка условия всегда выполняется в начале цикла. Это значит, что тело цикла может ни разу не выполниться, если условие выполнения сразу будет ложным.

Пример:

 

int main()

{ int i,b;

for (i=1; i<10; i++)

b=i*i;

return 0;

}

Оператор цикла while называется циклом с предусловием и имеет следующий формат:

while (выражение) тело;

В качестве выражения допускается использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая:

1. Вычисляется выражение.

2. Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется тело оператора while.

3. Процесс повторяется с пункта 1.

Оператор цикла вида

for (выражение-1; выражение-2; выражение-3) тело;

может быть заменен оператором while следующим образом:

 

выражение-1;

while (выражение-2)

 

{ тело

 

выражение-3;

 

}

 

Так же как и при выполнении оператора for, в операторе while вначале происходит проверка условия. Поэтому оператор while удобно использовать в ситуациях, когда тело оператора не всегда нужно выполнять.

Внутри операторов for и while можно использовать локальные переменные, которые должны быть объявлены с определением соответствующих типов.

 

Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:

do тело while (выражение);

Схема выполнения оператора do while:

1. Выполняется тело цикла (которое может быть составным оператором).

2. Вычисляется выражение.

3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.

Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.

Операторы while и do while могут быть вложенными.

Пример:

int i,j,k;

...

i=0; j=0; k=0;

do { i++;

j--;

while (a[k] < i) k++;

}

 

while (i<30 && j<-30);

 

Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.

 

Оператор continue, как и оператор break, используется только внутри операторов цикла, но в отличие от него выполнение программы продолжается не с оператора, следующего за прерванным оператором, а с начала прерванного оператора. Формат оператора следующий:

continue;

Пример:

int main()

{ int a,b;

for (a=1,b=0; a<100; b+=a,a++)

{ if (b%2) continue;

... /* обработка четных сумм */

}

return 0

}

Когда сумма чисел от 1 до а становится нечетной, оператор continue передает управление на очередную итерацию цикла for, не выполняя операторы обработки четных сумм.

Оператор continue, как и оператор break, прерывает самый внутренний из объемлющих его циклов.

 


Дата добавления: 2015-12-21; просмотров: 19; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!