int a[3][3] = { 3,0,-3,4,-4,1,5,2,-5};
int *pa[3] = { a[0], a[1], a[2] };
[C] Указатели
Код:
то есть как я понимаю a == pa == матрица3x3
3 0 -3
4 -4 1
5 2 -5
Код:
for(int i = 2; i >= 0; i--)
cout<<...
cout<<...
если вместо троеточия (*(*pa)+i) или (*(*(pa+i))) или (**pa+i), то возвращается первый столбец в обратном порядке...
а если (*(*(pa)+i)) или (*(*pa+i))), то первая строка -3 0 3
или я не понимаю указатели, или ..., но почему (*(*(pa+i))) возвращает первый столбец???
далее
(*(*(pa+i))) - смещаем указатель на i порядок и разименовываем, получаем первый столбец в обратном порядке {5,4,3}
далее
(**pa+i) - аналогично первому.
далее
(*(*(pa)+i)) - получаем указатель на первый столбец и пошагово его смещаем на i,попутно разыменовывая ,получаем {-3,0,3}
Посмотрим.
Код:
pa
|
\/
pa[0] pa[1] pa[3] массив указателей на строки)
| | |
\/ \/ \/
a[0][0] ... a[1][0] ... a[2][0] ...
|
\/
pa[0] pa[1] pa[3] массив указателей на строки)
| | |
\/ \/ \/
a[0][0] ... a[1][0] ... a[2][0] ...
*pa - из указателя на массив указателей получаем массив указателей
*pa - массив указатедей неявно преобразуеться к указателю на перый элемент(первый элемент - указатель на первую строку
Код:
int *pa[3] = { a[0], a[1], a[2] };
, а точнее так как все элементы расположены последовательно, то на весь массив а
Код:
int a[3][3] = { 3,0,-3,4,-4,1,5,2,-5};
*(*pa) - разименовываем указатель на первый элемент первой строки - получаем первый элемент
Таким образом выше приведенный пример с (**pa+i) или (*(*pa)+i) даст 5, 4, 3.