У меня есть эта пара декларации/определения на моем IDE Eclipse (в .h и .hpp соответственно):Являются ли ** и * [] одинаковыми?
A(T* []);
и
A<T>::A(T ** p_proc) { ... }
Первый представляет собой массив указателей, другой указатель указателей. Я смущен тем, что они взаимозаменяемы; Eclipse жалуется, если я заменил **
на * []
, выбросив синтаксическую ошибку. Однако Eclipse не вызывает ошибок, если я делаю противоположное.
Мой вопрос двоякий; эти две записи принципиально одинаковы? Есть T [][]
и T **
так же хорошо? Почему Eclipse выдает синтаксическую ошибку, когда файл hpp имеет тип * []
, но не в заголовке?
'T [] []' является незаконным. 'T [] [x]' и 'T **' не совпадают. –
@MattMcNabb; Я всегда думал, что они были одинаковыми при разложении ..: S – Brandon
@Brandon различает списки параметров функций и другие сценарии. Список [список параметров функции] (http://stackoverflow.com/questions/22677415/why-do-c-and-c-compilers-allow-array-lengths-in-function-signatures-when-they/22677793#22677793) является синтаксическим причудой. В других случаях выражение с типом массива «распадается» на указатель на его первый элемент. Поскольку указатель не является массивом, этот указатель не затухает снова. Если существует 'T x [6] [4];' then 'x' (при использовании в сценарии распада) распадается на тип' T (*) [4] ', который не распадается дальше, поскольку это указатель , а не массив. –