Баланс - это двумерный массив, который представляет собой массив массивов.Он будет распадаться, как любой массив, на указатель на свой первый элемент ... но этот элемент по-прежнему является массивом, а не плавающей точкой!указатель на массив на указатель на его первый элемент не совсем стандартен.Правильный способ - разыменовать balance
: это будет одномерный массив, который будет хорошо распадаться на указатель на первый float:
p = *balance; // no cast required here
При этом, с педантичной точки зрения, следующийline (*(p+(3*2)+1)
) объединяет двухмерный массив 2x5 с одномерным массивом размером 10. Результат не определен по стандарту, как только индекс становится больше, чем размер строки здесь 2. Конечно, все распространенные реализации допускают его совместимость сстарый код, но вы действительно должны задаться вопросом, зачем он вам нужен, и избегать этого, если можете.
Правильный и совместимый способ будет выглядеть так:
float (*pp)[2];
float balance[5][2] = { 2.34,
5.66,7.85,12.56,9.87,76.22,56.55,21.02,66.12,10.001 };
pp = balance;
printf("%.2f\n", pp[3][1]);