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);