Указатели и одномерные массивы. В языке С++ между указателями и массивами существует тесная связь

В языке С++ между указателями и массивами существует тесная связь. Например, когда вы объявляете массив 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.