Вкратце: 3-й вариант отличается тем, что, то типа вариабельных несовпадений указателей - ехЬегп объявляет указатель на массив целых чисел с неизвестным размером (неполный типа), и определение для той же переменной, но как указатель на массив из 5 int, которые являются разными (действительными) типами в соответствии со стандартом.
Подробно:
Первый сценарий staightforward: ехЬегп INT * а только декларирует существование переменной типа Int *. Вторая строка определяет ту же переменную.
второй сценарий: я снова прочитал стандарт, и это то, что он говорит:
Заявленный тип объекта массива может быть массив неизвестного размера и, следовательно, быть неполными в одном точка в блоке перевода и завершено позже; типы массивов в этих двух точках («массив неизвестных связанного Т» и «массив NT») различные типы
Я считаю, что это означает, что определение массива с индексом завершается предыдущая декларация переменный как массив с неизвестным размером (без индекса) - это то, что происходит в сценарии 2.
третьего сценария: Используя тот же смысл, что и от стандарта, типов массивов в эти две точки имеют разные типы. Следовательно, случай 3 завершился неудачно, потому что первая и вторая объявления затем объявили бы одну и ту же переменную указателя как указатель на разные типы, что приведет к ошибке «переопределения с разными типами»
[Отредактированный ответ после повторного чтения стандарта]
Вы пытались выполнить 'extern int (* a) [5]'? Существует трюк с пустым '[]', который иногда рассматривается как другой указатель, поэтому ваш код, возможно, интерпретируется как 'extern int (** a)'. – TalesM
Просто интересно, учитывая объявление 'extern int (* a) [];', что ваш компилятор дает как 'sizeof a' и' sizeof * a'? У меня есть смутное чувство, что хотя бы одно из этих двух выражений не будет компилироваться, потому что оно пытается взять размер не полностью объявленного объекта. –
Но это именно то, о чем вы говорили раньше: тип 'a' не может быть завершен. Это в цитате [ваш предыдущий вопрос] (http://stackoverflow.com/q/25967060). – dyp