Читайте также: |
|
Указатели и массивы тесно связаны друг с другом. Имя массива без индекса — это указатель на первый (начальный) элемент массива. Рассмотрим, например, следующий массив:
char p[10];Следующие два выражения идентичны:
p&p[0]Выражение
p == &p[0]принимает значение ИСТИНА, потому что адрес 1-го элемента массива — это то же самое, что и адрес массива.
Как уже указывалось, имя массива без индекса представляет собой указатель. И наоборот, указатель можно индексировать как массив. Рассмотрим следующий фрагмент программы:
int *p, i[10];p = i;p[5] = 100; /* в присваении используется индекс */*(p+5) = 100; /* в присвоении используется адресная арифметика */Оба оператора присваивания заносят число 100 в 6-й элемент массива i. Первый из них индексирует указатель p, во втором применяются правила адресной арифметики. В обоих случаях получается один и тот же результат. (Подробно указатели и адресная арифметика рассматриваются в главе 5.)
Можно также индексировать указатели на многомерные массивы. Например, если а — это указатель на двухмерный массив целых размерностью 10×10, то следующие два выражения эквивалентны:
a&a[0][0]Более того, к элементу (0,4)[1] можно обратиться двумя способами: либо указав индексы массива: а[0][4], либо с помощью указателя: *((int*)а+4). Аналогично для элемента (1,2): а[1][2] или *((int*)а+12). В общем виде для двухмерного массива справедлива следующая формула:
a[j][k] эквивалентно *((базовый_тип *)а+(j* длина_строки)+k)Дата добавления: 2015-08-17; просмотров: 46 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Функции | | | Потоки и файлы |