Объявление переменной, выделяет в памяти ячейки. Можно определить в какую ячейку компилятор займет данные:
Int i;
I = 35;
&i
printf (“Адрес %d \n”, &i);
Указатели – это особый вид переменной которая хранит адрес переменной какого либо типа (то есть номер ячейки памяти, где находятся данные)
Указатели объявляются: тип*имя_указателя.
Тип – тип переменной, на которую указывает указатель.
Пример: int *iptr;
Float *fptr;
Если переменная определенна, она должна на что то указывать:
Int *iptr;
Int i;
Iptr = &i;
Пример:
#include <stdio.h>
main ( )
{
int i=35;
int *iptr;
iptr = &i;
printf (“Значение переменной”, i);
}
Массивы
Это располож. вплотную друг за другом в памяти эл-ми одного типа.
Тип имя_массива[кол-во]
Целочисленное беззнаковое
Int array [40]
Св-ва массива:
1.Все эл-ты имеют один тип
2.Все эл-ты расположены в памяти друг за другом;
индекс первого эл-та=0.
3.Имя массива явл. Указателем-константой=адресу начала массива( т.е. мл.б. первого эл-та массива )
При описании массива мл.б. выполнена инициализация его эл-ов:
1.Инициализация по умолчанию( производится компилятором только для статических или внешних массивов ) – все эл-ты массива заменяются нулями.
2.Явная инициализация эл-ов( после описания массива помещается список нач. знач. Эл-ов заключенный в {})
Сущ. 2 формы явной инициализации:
1.Явное указание числа эл-ов массива и список нач. знач.( возможно с меньшим числом эл-ов ):
int array [10] = { 1,2,3,4,5 };
array [0] = 1;
array [1] = 2;
…..
array [4] = 5;
а) Для статич. и внешн. массивов:
array [5] = 0;
…..
array [9] = 0;
б) Для автомат. массивов знач. неиниц-их эл-ов будет случайным:
array [5] = ?;
…..
array [9] = ?;
Если число эл-ов массива меньше, чем в описке иниц-ии, то, компилятор выдаст ошибку.
2. Только , со списком нач. значений( компилятор сам определяет кол-во эл-ов по списку иниц-ии)
char array []= { ‘A’, ‘B’, ‘C’, ‘D’};
Доступ к отдельным эл-ам массива мл. б. 2 способами:
1.С помощ. индекса
2.Спомощ. указателя
1 Для ссылки на эл-т указывается его порядковый номер в массиве.
Main ()
{
int a[] = { 1,2,3,4,5 };
int index = 0, first, last, bad;
first = a [ index ]; // first = 1;
last = a [ index+4 ]; // last = 5;
bad = a [ index+6 ]; // bad – случайное
В языке CI отсутствует контроль за границами массива. Этот контроль можно делать специально в программе, например, с помощью sizeof. В случае применения к массиву рез-т – число байт, кот. занимает массив в памяти.
Int array [] = { 1,2,3,4,5,6,7 };
Int members;
Members = sizeof ( array ) / sizeof ( int );
Рез-т = 7 эл-ов.
2 Т.к. имя массива – это указатель на мл. б. 1-го эл-та, то используя операцию * можно выполнить доступ к любому из эл-ов массива