Технология программирования. Базовые конструкции C/C++. Липачев Е.К. - 74 стр.

UptoLike

Составители: 

74
Указатели и многомерные массивы
В многомерных массивах имя массива также указывает на первый
элемент массива. Обращение к элементу массива, указанием его индексов,
является сокращенной формой выражения с указателями. Пусть a
двумерный массив размера n*m, где n, m заданные константы, тогда
выражение a[i][j] преобразуется компилятором в операцию с
указателями *(*(a+i)+j). Выражение a[i] является указателем на
первый элемент строки с индексом i.
Пример.
const int N=3;
const int M=5;
setlocale(LC_CTYPE, "rus");//русификация консоли
int a[N][M]={{0,1,2,3,4},{1,2,3,4,5},{2,3,4,5,6}};
cout<<"\n Первый элемент= "<<*(*a);
cout<<"\n a[2][3]="<<*(*(a+2)+3);
int *p;
p=a[2];// адрес первого элемента строки 2
cout<<"\n p[3]="<<*(p+3);
Пример. Многоуровневая адресация. Обращение к одним и тем же
данным с помощью массива и указателя на указатель. Указатели a и b имеют
разные значения, но адреса строк a[i] и b[i] одинаковые, как следствие,
обращения a[i][j] и b[i][j] дают одинаковый результат.
const int N=3;
const int M=5;
int a[N][M]={{0,1,2,3,4},{1,2,3,4,5},{2,3,4,5,6}};
int **b;
b= new int*[N];
for(int i=0; i<N; i++) b[i]=a[i];
Указатели и многомерные массивы
      В многомерных массивах имя массива также указывает на первый
элемент массива. Обращение к элементу массива, указанием его индексов,
является сокращенной формой выражения с указателями. Пусть a –
двумерный массив размера n*m, где n, m – заданные константы, тогда
выражение a[i][j] преобразуется компилятором в операцию с
указателями *(*(a+i)+j). Выражение a[i] является указателем на
первый элемент строки с индексом i.
     Пример.
const int N=3;
const int M=5;
setlocale(LC_CTYPE, "rus");//русификация консоли
int a[N][M]={{0,1,2,3,4},{1,2,3,4,5},{2,3,4,5,6}};
cout<<"\n Первый элемент= "<<*(*a);
cout<<"\n a[2][3]="<<*(*(a+2)+3);
int *p;
p=a[2];// адрес первого элемента строки 2
cout<<"\n p[3]="<<*(p+3);




     Пример. Многоуровневая адресация. Обращение к одним и тем же
данным с помощью массива и указателя на указатель. Указатели a и b имеют
разные значения, но адреса строк a[i] и b[i] одинаковые, как следствие,
обращения a[i][j] и b[i][j] дают одинаковый результат.
const int N=3;
const int M=5;
int a[N][M]={{0,1,2,3,4},{1,2,3,4,5},{2,3,4,5,6}};
int **b;
b= new int*[N];
for(int i=0; i