1. Краткие
теоретические сведения
«статические»
массивы
2.
1.1. Определение массива
Определение массива содержит тип
элементов, имя массива и количество элементов в массиве.
int mas[10];
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Т.
е. индексы элементов в массиве mas могут меняться от
0 до 9, всего в массиве 10 элементов.
1.2. Инициализация
массива
Инициализация массивов возможна при их
определении:
double d[] = {1, 2,
3, 4, 5};
Длина
массива вычисляется компилятором по количеству значений перечисленных в
фигурных скобках.
1.3. Указатели
Каждая переменная в программе это объект,
имеющий имя и значение по имени можно обратиться к переменной и получить ее
значение. Оператор присваивания ( = ) выполняет обратное действие: имени
переменной ставится в соответствие значение.

a=10;
Выражение
&a позволяет получить адрес участка памяти, выделенного
переменной а. Операция & применима только к объектам
имеющим имя и размещенным в памяти.
Имея возможность определить адрес
переменной с помощью &, надо иметь возможность работать с этим адресом:
сохранять его, передавать, преобразовывать. Для этого вводится понятие
указателя. Указатель - это переменная, значением которой служит адрес объекта
конкретного типа. Нулевой адрес обозначается константой NULL, которая определена
в заголовочном файле stdio.h. Чтобы определить
указатель надо сообщить на объект какого типа
ссылается этот указатель.
char *z;
int *k,*i;
float *f;
*
- это операция разыменования. Операндом этой операции всегда является указатель.
Результат операции - это тот объект, который адресует указатель_операнд.
*z=’$ ‘;


*k=*i=0;

Пример:
int e, c, b, *m;
.
. . . . . . . .
m = &e ;
*m = c + b ;
Операции
над указателями.
· присваивание (=);
· получение значения объекта, на который ссылается указатель (*);
· получение адреса самого указателя (&).
Пример:
int date = 10;
int *i, *k;;
i = &date;
k = i;
z = NULL;
Подобно
любым переменным переменная типа указатель имеет имя, арес
в памяти и значение.
С
помощью унарных операций ++ и –- числовые значения переменных типа указатель
меняются по разному, в зависимости от типа данных, с
которым связаны эти переменные.
Пример:
char *z;
int *k,*i;
float *f;
.
. . . . . .
z++; // значение изменяется на 1
i++; // значение изменяется на 2
f++; // значение изменяется на 4
Т.
е. при изменении указателя на 1, указатель переходит к началу следующего
(предыдущего) поля той длины, которая определяется типом объекта, адресуемого
указателем.
1.4. Указатели и массивы
Имя массива без индекса является
указателем-константой, т. е. адресом первого элемента массива (a[0]).
a
|
|
|
|
|
|
|
|
|
*a = = a[0] ;
*(a+1) = = a[1];
. . . . . . . . .
*(a+i) = =a[i];
В
соответствии с синтаксисом в Си существуют только одномерные массивы, но их
элементами , в свою очередь, тоже могут быть массивы.
int a[5][5];
Для
двумерного массива:
a[m][n] = = *(a[m]+n) = = *(*(a+m)+n);