Добро пожаловать в блог официального сайта www.cplus-plus.ru

Все представленные материалы в этом блоге находятся по адрусу www.cplus-plus.ru 
Сайт разработан с целью удобного изучения объектно-ориентированного программирования языка C++. Сайт содержит: большое количество cред разработки, видеоуроков, исходников, учебников C++ как для начинающих, так и для продвинутых!

Поиск по этому блогу

Каталог статей

вторник, 19 октября 2010 г.

Связь между массивами и указателями

Хотя указатель char* mи массив charm[100] – переменные разных типов, имя массива рассматривается транслятором как указатель на начальный элемент массива. Адресные выраженияm[n] и *(m + n) эквивалентны.

Замечание. Из эквивалентности адресных выражений следует:

m[n] <=> *(m + n) <=> *(n + m) <=>n[m]

т.е. обратиться к элементу массива m[n] можно и формате n[m].

Пример. Скопировать содержимое массива A в массив B.

int a[]={1,2,3,4,5,6,7,8,9}, B[9];

int i;

// 1-йспособ, самыйпонятный
for (i = 0; i < 9; i++)
B[i] = A[i];

// 2-йспособ
for (i = 0; i < 9; i++)
*(B + i) = *(A + i);

// 3-йспособ

int*a, *b;
for (a = A, b = B, i= 0; i < 9; i++)
*(b++) = *(a++);

Вычитание указателей имеет смысл, только если оба они указывают на элементы одного массива.
Связь между массивами и указателями распространяется и на двумерные массивы, m[i][j] означает то же самое, что *(*(m + i) + j).

Замечание. Пусть массив определен как intm[3][4]. В соответствии с арифметикой указателей транслятор вычисляет адресное выражение *(*(m + i) + j) или, что то же самое, m[i][j] так:

(адрес начала массива m) + i*(размер одномерного массива из 4-х целых чисел) + j*(размер целого числа).

Отсюда следует, что для вычисления адресного выражения m[i][j] транслятору необходимо знать лишь вторую размерность массива, но не первую.

Выражение m[i] рассматривается транслятором как имя одномерного массива из 4-х целых чисел, поэтому все следующие выражения правильны и обозначают одно и то же, а именно, m[2][3]:
*(m[2]+3),
(*(m+2))[3],
3[m[2]],
3[2[m]].

Источник: http://www.cplus-plus.ru

Комментариев нет:

Отправить комментарий

Объектно-ориентированное программирование на языке C++