Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_новое.DOC
Скачиваний:
7
Добавлен:
28.09.2019
Размер:
486.4 Кб
Скачать

Операция sizeof()

Операция sizeof() имеет две формы:

  1. sizeof(тип). Результатом является целочисленное значение величины типа в байтах;

  2. sizeof(выражение). Значение выражения не вычисляется, но определяется его тип и количество байт под этот тип.

Оба варианта показаны в примере 4.6.

//Пример 4.6.

// Определение объема памяти, занимаемой переменной и массивом

// Вычисление количества элементов массива

#include <stdio.h>

Void main(void)

{

Int size;

float a;

double am[10];

size=sizeof(int);

printf("Размер памяти в байтах под тип int: %d\n",size);

size=sizeof(a);

printf("Переменная a типа float занимает %d байта памяти\n",size);

size=sizeof(am);

printf("Размер памяти, отводимой под массив am типа double: %d\n",size);

size=sizeof(am)/sizeof(double);

printf("Количество элементов массива am = %d\n",size);

}

Прямое назначение оператора sizeof() — динамическое распределение памяти. В примере 4.7 резервируется память под один элемент, в примере 4.8 — под три элемента.

//Пример 4.7.

//Функция malloc() резервирует память под один элемент типа int

#include <stdio.h>

#include <alloc.h>

Void main(void)

{

Int *iptr;

iptr=(int*) malloc(sizeof(int)); // Распределение памяти

*iptr=421;

printf("Содержимое iptr:%p\n",iptr);

printf("Адресуемое значение: %d\n",*iptr);

}

//Пример 4.8.

// Динамическое pаспpеделение памяти с помощью операции sizeof()

// Функция calloc() резервирует память под несколько элементов

#include <stdio.h> // Функция printf()

#include <conio.h> // Функции clrscr(), getch()

#include <alloc.h> // Функция calloc()

Void main(void)

{

#define NUMINTS 3

Int *list,I;

clrscr();

list = (int *) calloc(NUMINTS, sizeof(int));

*list = 123;

*(list+1) = 456;

*(list+2) = 789;

printf(" Список адресов: ");

for (i=0; i<NUMINTS; i++) printf("%4p ",(list+i));

printf("\n Список значений: ");

for (i=0; i<NUMINTS; i++) printf("%4d",*(list+i));

printf("\n");

getch();

}

Операция вызова функции

Возможны две формы вызова функции:

имя_функции (параметры); (см. примеры 3.4, 3.7);

имя_переменной = имя_функции(параметры);

Запись printf(“Значение = %d\n”,i) — это тоже операция вызова функции.

5 Операторы языка с

Операторы языка С можно подразделить на следующие группы:

; — пустой оператор;

a = b; — оператор-выражение;

{ } — составной оператор;

управляющие операторы:

  1. условного перехода if...else и выбора switch();

  2. цикла: for, while, do...while;

  3. безусловного перехода goto;

  4. другие операторы: break, continue, return.

Условный оператор if

Первый вариант — полная форма оператора if:

if (условие) оператор1;

else оператор 2;

Структура данного оператора показана на рис. 5.1, а. Вариант использования формы см. в примере  4.3.

Второй вариант — усеченная форма оператора if (рис. 5.1, б, см. пример 5.8):

if (условие) оператор 1;

оператор 2;

...................

Третий вариант — вложенная форма оператора if (рис. 5.1, в, пример 5.7):

if (условие 1) оператор 1;

else if (условие 2) оператор 2;

else if (условие 3) оператор 3;

.......................................................

Условие может быть любой операцией (арифметической, логической, сравнения и т.д.). Если результатом ее выполнения является значение, не равное нулю, что равносильно “истине”, то переходят к оператору 1, иначе (результат равен нулю — “ложь”) переходят к оператору 2 в первом и втором вариантах или к проверке условия 2 вложенного оператора if.

Рис. 5.1

Оператор — это любое выражение языка С. Он может быть составным. Тогда его надо отделить фигурными скобками { }. Скобки необходимо использовать в операторе if для удобства чтения, а так же, чтобы избежать ошибки в порядке выполнения действий.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]