cplus-plus.ru logo
Мы переехали на cplus-plus.ru
Главная страница В закладкиО сайтеКарта сайта
Добавить в закладки

Меню сайта

Полезные ссылки

Наша рассылка
Подписаться на рассылку
"C++ : cplus-plus.ru :
Рассылка статей C++"


Друзья сайта
alsproject.ru Выбор выходного разделительного конденсатора

Приветствую Вас, Гость · rss 24-Апр-2024, 14:43
Главная » Статьи » Статьи по C++

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

Хотя указатель 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++ | Добавил: FazaNaka (20-Сен-2010)
Просмотров: 624 | Рейтинг: 0.0/0