Ваша проблема в том, что вы выделили массив указателей с плавающей точкой.Вам нужно выделить массив с плавающей точкой.Так что в настоящее время у вас нет памяти, выделенной для фактических операций с плавающей запятой.Если вы сделаете это, вы выделите эту память:
float *speed = new float[arraySize];
У вас нет необходимости в двумерном / зубчатом массиве, который я вижу.Если вы начнете с кода, приведенного выше, ошибки компилятора должны привести вас в правильном направлении.(По сути, вы начнете удалять *
из множества мест в вашем коде.)
EDIT Исходя из вашего требования, которое я неправильно понял, возможный подход заключается в следующем.Другой ответ (тот, который не мой) имеет смысл в более широких сценариях, чем этот, но, надеюсь, это своего рода другой угол, чтобы подумать об этой довольно произвольной проблеме, которую вы пытаетесь решить:
int main()
{
float *pFloats = new float[10];
float **ppFloats = new float*[10];
//assign float values and pointers to them in same loop
for (int i = 0; i < 10; i++)
{
pFloats[i] = i;
ppFloats[i] = &pFloats[i];
}
//swap two arbitrary pointers
float *pTemp = ppFloats[4];
ppFloats[4] = ppFloats[5];
ppFloats[5] = pTemp;
//print our float array
for (int i = 0; i < 10; i++)
printf("%f\n", pFloats[i]);
//print our float array *through* our pointers
for (int i = 0; i < 10; i++)
printf("%f\n", *ppFloats[i]);
delete[] ppFloats;
delete[] pFloats;
}
Игнорировать жестко запрограммированные константы и т. Д. Суть в том, что я создал непрерывную область памяти для поплавков, а затем создал массив указателей поплавков поверх него.Обратите внимание, что я могу отсортировать массив указателей с нулевым воздействием на исходный массив.Есть намного более умных способов сделать это, но ... похоже, вы изучаете необработанные указатели, поэтому ...
Сравните с другим ответом, который создает зазубренную память дляfloat (по одному, по требованию, не обязательно смежный).