У вас есть двумерный массив mat
.
*mat
и mat[0]
одинаковы, они (указатель на) первый 1D массив {4.0, 3.0}
.
mat[1]
будет указателем на второй одномерный массив.
**mat
- это первое значение первого 1D массива: 4.0
.
*(mat + 1)
- это mat[1]
, второй 1D массив, поэтому **(mat + 1)
- это первое значение второго 1D массива: 2.0
.
#include <stdio.h>
int main(void) {
float mat[2][2] = {{4.0, 3.0}, {2.0, 1.0}};
printf("%p\n", (void*)*mat);
printf("%p\n", (void*)mat[0]);
printf("%f\n", **mat);
printf("%f\n", **(mat+1));
return 0;
}
напечатает
0x7ffc9cc9e290
0x7ffc9cc9e290
4.000000
2.000000
первые 2 значения являются адресом массива, значения могут быть разными для вас, но они должны быть равны.
https://ideone.com/xEuxgg