Они одинаковы настолько, насколько оба x указывают на первый адрес памяти в массиве из 10 целых чисел, однако сильно отличаются в этом
int x[10]
объявляет память в статической оперативной памяти, а
Ключевое слово «new» создает их динамически с кучей, и примерно так же, как использование malloc в c для динамического создания массива.
Не только это, но (я полагаю, не проверял теорию) есть вероятность, что:
int* x = new int[10];
может завершиться ошибкой и, в зависимости от компилятора, может вернуть ошибку или нулевой указатель. Если компилятор c ++ придерживается стандартов ANSI / ISO, то он поддерживает форму new "no-throw", которая возвращает нулевое значение в случае неудачного размещения, а не генерирует исключение.
Другое отличие состоит в том, что оператор 'new' может быть перегружен.
Однако в чем я не уверен, так это в том случае, если один из них (в c ++) создает массив с нулевым символом в конце. Я знаю, что в c, по крайней мере, в компиляторе, который я использую, вы должны всегда добавлять \ 0 к любым строкам или массивам, если вы ожидаете, что сможете перебирать их без перерасширения границ.
Только моя стоимость в $ .02. :)