Разница в том, что сначала указатель на тип double
а второй массив двойных.
Важно отметить следующее:
Массивы не являются указателями!
Выражение с типом массива (которое может быть именем массива) преобразует в указатель всякий раз, когда тип массива недопустим, но тип указателя является.
double array[100];
double* same_array = array;
Согласно упомянутому правилу, в приведенном выше имени массива происходит переход к указателю на его первый элемент.
Почему происходит сбой вашей программы?
Объявление массива создает массив, который занимает некоторую память в зависимости от класса хранилища (где он объявлен).
В то время как указатель просто создает указатель, который указывает на некоторый адрес. Вам явно нужно указать, чтобы он указывал на какой-то действительный объект, чтобы иметь возможность его использовать.
Это должно быть хорошее чтение:
Как использовать массивы в C ++?