Связь двумерных массивов с указателями — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Связь двумерных массивов с указателями



Имя двумерного массива является указателем константой на массив указателей констант.

Элементами массива указателей являются указатели константы на начало каждой из строк массива.

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

Между указателями и массивами существует определенная связь. Предположим, имеется массив из 100 целых чисел. Запишем двумя способами программу суммирования элементов этого массива:

long array[100];

long sum = 0;

for (int i = 0; i < 100; i++)

sum += array[i];

 

То же самое можно сделать с помощью указателей:

long array[100];

long sum = 0;

for (long* ptr = &array[0];

ptr < &array[99] + 1; ptr++)

sum += *ptr;

 

24. Массивы указателей !!!!!

Так как указатели сами являются переменными, то вы вполне могли бы ожидать использования массива указателей. Это действительно так. Мы нуждаемся в таком представлении данных, которое бы позволяло удобно и эффективно обрабатывать строки текста переменной длины.

Здесь и возникают массивы указателей. Если подлежащие сортировке сроки хранятся одна за другой в длинном символьном массиве (управляемом, например, функцией ALLOC), то к

каждой строке можно обратиться с помощью указателя на ее первый символ. Сами указатели можно хранить в массиве.

Альтернатива:

 

Операции с указателями

 

Над указателями можно выполнять унарные операции: инкремент и декремент. При выполнении операций ++ и -- значение указателя увеличивается или уменьшается на длину типа, на который ссылается используемый указатель.

 

Пример:

 

int *ptr, a[10];

ptr=&a[5];

ptr++; /* равно адресу элемента a[6] */

 

ptr--; /* равно адресу элемента a[5] */

 

 

В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int. При этом результатом операции будет указатель на исходный тип, а его значение будет на указанное число элементов больше или меньше исходного.

 

Пример:

 

int *ptr1, *ptr2, a[10];

 

int i=2;

 

ptr1=a+(i+4); /* равно адресу элемента a[6] */

 

ptr2=ptr1-i; /* равно адресу элемента a[4] */

 

 

В операции вычитания могут участвовать два указателя на один и тот же тип. Результат такой операции имеет тип int и равен числу элементов исходного типа между уменьшаемым и вычитаемым, причем если первый адрес младше, то результат имеет отрицательное значение.

 

Пример:

 

int *ptr1, *ptr2, a[10];



 

int i;

 

ptr1=a+4;

 

ptr2=a+9;

 

i=ptr1-ptr2; /* равно 5 */

 

i=ptr2-ptr1; /* равно -5 */

 

 

Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, !=, <, <=, >, >= при этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (ложь) или 1 (истина).

 

Пример:

 

int *ptr1, *ptr2, a[10];

 

ptr1=a+5;

 

ptr2=a+7;

 

if (prt1>ptr2) a[3]=4;

 

 

В данном примере значение ptr1 меньше значения ptr2 и поэтому оператор a[3]=4 не будет выполнен.

Строки символов

- строки – константы.

 

- массивы char

 

-указатели на char

 

- Массивы строк

 






Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...





© cyberpedia.su 2017 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав

0.005 с.