Указатели, массивы, строки, функции. Решение задачи. Работа с отладчиком, страница 3

const  - служит в С++ для создания констант.

Для того, чтобы пользователи не подсчитывали количество символов в строках, в Си, строки определили,  как особый массив символов с добавлением символа \0 в самый конец. Это позволяет компилятору всегда самостоятельно понять, где заканчивается строка. Принято работать со строками через указатели.

10)  программа  Dc_9.c

Передача параметров функции

Смотрим на этой программе работу отладчика оболочки

Когда в Фортране функции передаются параметры, необходимо описать типы этих параметров в блоке описания переменных функции. В Си  типы переменных необходимо сразу указать там, где описаны формальные параметры. Каждый параметр должен быть описан отдельно. Читать такое описание проще так, как сразу ясно, что функция получает.

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

&index   -  фактический параметр – адрес переменной index

int *in2  -  формальный параметр  - указатель, который может «работать» с адресом

Передача параметра эквивалентна:     in2 =  &index  

Если такого явного описания нет, то передается только значение переменной.

Передача параметра эквивалентна обычному оператору присваивания:     count =  in1;

Выполните программу по шагам. Добавьте переменные в окно просмотра.

11)  программа  Dc_10.c

A[3][4]  - так вводится матрица из 3-х строк по 4 столбца

char* A[3][4]   - в каждый элемент матрицы мы записываем строку.

Отредактируйте этот файл так,  чтобы в массиве хранились целые (байты) или просто целые:

     -               char *     --->  char (или int)

    -               "00"       --->  00   и аналогично

                    (выделите редактируемый кусок и Replace – Selection     "      на   "пусто"  )

   -                поменяйте формат вывода

                     %3s        --->  %3d

12)  программа  Dc_11.c

Массив:    чтение и вывод

Как и на Фортране резервируем место в памяти под массив «побольше»

                     int   A[40] ;

Открываем файл для чтения:

                      inf = fopen("input.txt", "rt");    -   будем читать данные из файла input.txt

Обратите внимание, что для того чтобы все программные компонеты (т.е. все функции) могли бы работать с входным и выходным файлом, последние объявляются на ГЛОБАЛЬНОМ уровне.

На  ГЛОБАЛЬНОМ уровне объвлена и функция print_Array(int N, int A[40]), так как она сразу не

определяется, но мы хотим, чтобы функция main() могла её использовать.

Массивы, с которыми мы работаем, организованы также, как и те массивы, с которыми мы работали на Фортане: в начале – размер массива, а затем его элементвы.

В начале читаем сколько элементов в массиве:

                         fscanf(inf, "%d",  &N);

Затем, в цикле читаем   все  элементы массива:

                         for( i=0;  i<N;  i++)

                               fscanf(inf, "%d",  &A[i]);

Как и на Фортране передаем функции размер массива и сам массив (имя массива).

Функция должна знать, как устроена ПАМЯТЬ отведенная под хранение массива. Поэтому мы, как и на фортране, задаем размер ПАМЯТИ под мкассив: