{
{2,3,4,5,6,7},
{1,3,5,7,9,1},
{7,6,5,4,3,2},
{1,2,6,7,8,9}, };
int *pm = (int*) m;
int (*pmm) [6] = m; //указатель pmm на массив из шести int-ов
//значение указателя - целое число:
Console::WriteLine("№1 \tpm ={0:x}\t\tpmm ={1:x}\n\tsizeof(pm)={2} байта\tsizeof(pmm)={3} байта", (int)pm, (int)pmm, sizeof(pm),sizeof(pmm));
//указатели можно складывать с константами:
Console::WriteLine("№2 {0} {1} {2} {3}", *pm , *(pm+1) ,*(int*) pmm , *(int*) ( pmm+1) );
pm++;
pmm++; //практически, то же самое, что и в №2, но после сдвига указателей:
Console::WriteLine("№3 {0} {1} {2} {3}", *pm , *(pm+1) ,*(int*)pmm , *(int*)(pmm+1));
int s;
Console::WriteLine("№4 s = {0}", s ); //в стандарте языка авто переменные не обнуляются
s= *(++pm); //указатели можно сравнивать:
while ( pm < (int*) pmm ) s += *pm++;
Console::WriteLine("№5 s = {0}", s ); // 26, потому что элемент m[0][2] суммируется дважды
pm = &m[3][4];
pmm = ( int (*)[6] ) pm; //также допустима операция вычитания:
Console::WriteLine("№6 {0} {1} {2} {3}", *(pm-1) , *(int*)pmm ,*(int*)(pmm-1) , *(int*)(pmm-2));
}
Указатель и матрица