Происходит то, что *h
имеет тип int*
, который является указателем.
Когда вы увеличиваете, оно будет фактически увеличиваться на 4, а не на 1. Поэтому число, которое вы печатаете в конце, равно 1 + 4 = 5
.
Вот ваш код с большим количеством отпечатков:
int **h;
int a[2][2]={1,2,3,4};
h=(int **)a;
cout << h[0] << endl;
cout << h[1] << endl;
cout << h[2] << endl;
cout << h[3] << endl;
int i,j;
printf("%d",*h);
(*h)++;
printf("\n%d",*h);
cout << endl;
cout << h[0] << endl;
cout << h[1] << endl;
cout << h[2] << endl;
cout << h[3] << endl;
Вывод:
00000001
00000002
00000003
00000004
1
5
00000005
00000002
00000003
00000004
Таким образом, вы можете увидеть первое значение, увеличиваемое на 4. Потому что 4 - это размер указателя при компиляции для 32-разрядного.