Хотя указатель 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
Добро пожаловать в блог официального сайта www.cplus-plus.ru
Все представленные материалы в этом блоге находятся по адрусу www.cplus-plus.ru
Сайт разработан с целью удобного изучения объектно-ориентированного программирования языка C++. Сайт содержит: большое количество cред разработки, видеоуроков, исходников, учебников C++ как для начинающих, так и для продвинутых!
Сайт разработан с целью удобного изучения объектно-ориентированного программирования языка C++. Сайт содержит: большое количество cред разработки, видеоуроков, исходников, учебников C++ как для начинающих, так и для продвинутых!
Поиск по этому блогу
Каталог статей
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий