Указатели и одномерные массивы. В языке С++ между указателями и массивами существует тесная связь
В языке С++ между указателями и массивами существует тесная связь. Например, когда вы объявляете массив int array[25], то этим определяет не только выделение памяти для двадцати пяти элементов массива, но и для указателя с именем array. В языке С++ имя массива без индексов трактуется как адрес начального элемента. То есть имя массива является указателем на массив. Таким образом, доступ к элементам массива осуществляется через указатель с именем array.
Поскольку имя массива является указателем допустимо, например, такое присваивание:
int arrаy[25];
int *ptr;
ptr=array;
Здесь указатель ptr устанавливается на адрес первого элемента массива, причем присваивание ptr = arrаy можно записать в эквивалентной форме ptr=&arrаy[0].
Адрес каждого элемента массива можно получить, используя одно из 3 выражений:
Адрес в памяти | … | ||||||
Индекс | ... | ||||||
Значения | … | ||||||
Адрес i - го элемента | array &array[0] ptr | array +1 &array[1] ptr + 1 | array +2 &array[2] ptr + 2 | array +3 &array[3] ptr + 3 | array +4 &array[4] ptr + 4 | … | array +24 &array[24] ptr + 24 |
А обращение к пятому элементу массива можно записать как:
array[4], *( array + 4), *(рtr + 4).
Эти оператора вернут пятый элемент массива.
Таким образом, С++ дает два способа обращения к элементу массива:
· с помощью индексированного имени;
· посредством арифметики с указателями.
Версия с индексированным именем выполняется медленнее, так как в языке С++ на индексирование массива уходит больше времени, чем на выполнение оператора *. Поэтому использование указателей для доступа к элементам массива в языке С++ применяется довольно часто.
Пример 2.
#include <stdio.h>
void main() {
int array[10];
int *p;
p=&array[0];
/*эквивалентные операции присваивания*/
*array=2; printf("%d\n", array[0]);
array[0]=2; printf("%d\n", array[0]);
*(array+0)=2; printf("%d\n", array[0]);
*p=2; printf("%d\n", array[0]);
p[0]=2; printf("%d\n", array[0]);
*(p+0)=2; printf("%d\n", array[0]);
}
В результате выполнения любой из эквивалентных операций присваивания в данном примере начальному элементу массива присваивается значение 2, но быстрее всего компьютер выполнит операции *array=2 и *p=2, так как в них не требуется выполнять операции сложения.
Дата добавления: 2015-02-16; просмотров: 782;